非プロフェッショナルコード9,10週JavaScript同期と非同期の学習
👏🏻 同期と非同期
≪同期化|Synchronize|ldap≫:次の操作を実行するには、要求が送信された後に、要求の応答を受信する必要があります.
≪非同期|Asynchronous|ldap≫:応答に関係なく、リクエストを送信します.
JavaScriptは同期されています.良いニュースがあってから、私たちが書いた順番に同期して行きます.
console.log('1');
setTimeout(() => {
console.log('2');
}, 1000);
console.log('3');
例えば、1→3→2の順に非同期で実行する.settimeoutのような関数をコールバック関数と呼ぶ.
👆🏻 Synchronous callback
function printImeediately(print) {
print();
}
printImmediately(()=> console.log('hello'));
上記の例を追加すると、1→3→hello→2の順に実行されます.✌🏻 Asynchronous callback
function printWithDelay(print, timeout) {
setTimeout(print, timeout);
}
printWithDelay(()=>console.log('async callback'), 2000);
上記の例を追加し、1→3→hello→2→async callbackの順に実行します.片付けてください.
function printImmediately(print) {
print();
}
function printWithDelay(print, timeout) {
setTimeout(Print, timeout);
}
console.log('1'); // 동기
setTimeout(()=>console.log('2'), 1000) // 비동기
console.log('3'); // 동기
printImmediately(()=>console.log('hello')); // 동기
printWithDelay(()=>consoele.log('async callback'), 2000); // 비동기
実行と理解すればよい.👿 コールバック地獄の例
class UserStorage {
loginUser(id, password, onSuccess, onError) {
setTimeout(()=>{
if (
(id === 'ellie' && password === 'dream') ||
(id === 'coder' && password === 'academy')
) {
onSuccess(id);
} else {
onError(new Error('not found'));
}
}, 2000);
}
getRoles(user, onSuccess, onError) {
setTimeout(()=> {
if(user === 'ellie') {
onSuccess({ name: 'ellie', role: 'admin' });
} else {
onError(new Error('no access'));
}
}, 1000);
}
}
const userStorage = new UserStorage();
const id = prompt('enter your id');
const password = prompt('enter your password');
userStorage.loginUser(id, password, (user) => {
userStorage.getRoles(user, (userWithRole) => {
alert(`Hello ${userWithRole.name}, you have a ${userWithRole.role} role`
);
}, (error) => {
console.log(error})
}, (error) => {
console.log(error)}
);
🔓 callback地獄の問題
Reference
この問題について(非プロフェッショナルコード9,10週JavaScript同期と非同期の学習), 我々は、より多くの情報をここで見つけました https://velog.io/@dms873/비전공자-코딩-배우기-9-10주차-자바스크립트-동기와-비동기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol