JavaScript同期/非同期
18518 ワード
Callback
hoisting
以下のコードを実行し、1,2,3を順次出力します.
典型的な非同期関数
Synchronous Callback
Asynchronous Callback
Callback地獄体験
次のカテゴリがある場合は、ログインに成功すると、ログインIDのロールが出力されるプログラムを作成できます.
hoisting
변수와 함수를 최상단으로 이동한 후 실행
Synchronous以下のコードを実行し、1,2,3を順次出力します.
console.log("1");
console.log("2");
console.log("3");
Asynchronous典型的な非同期関数
setTimeout
console.log("1");
setTimeout(() => {
console.log("2");
}, 1000);
console.log("3");
1、3、2の順に出力します.Synchronous Callback
function printImmediately(print) {
print();
}
console.log("1");
setTimeout(() => {
console.log("2");
}, 1000);
console.log("3");
printImmediately(() => {
console.log("hello");
});
Asynchronous Callback
function printWithDelay(print, timeout) {
setTimeout(print, timeout);
}
console.log("1");
setTimeout(() => {
console.log("2");
}, 1000);
console.log("3");
printWithDelay(() => {
console.log("async callback");
}, 2000);
Callback地獄体験
次のカテゴリがある場合は、ログインに成功すると、ログインIDのロールが出力されるプログラムを作成できます.
class UserStorage {
loginUser(id, password, onSuccess, onError) {
setTimeout(() => {
if (id === "2je0" && password === "1234") {
onSuccess(id);
} else {
onError(new Error("not Found"));
}
}, 2000);
}
getRoles(user, onSuccess, onError) {
setTimeout(() => {
if (user === "2je0") {
onSuccess({ name: "2je0", role: "student" });
} 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,
(id) => {}, // 로그인이 성공했을 때
(error) => {} // 로그인이 실패했을 때
);
userStorage.loginUser(
id,
password,
(id) => {
userStorage.getRoles(
id,
(data) => {},
(error) => {}
);
},
(error) => {}
);
userStorage.loginUser(
id,
password,
(id) => {
console.log(id + " login success");
userStorage.getRoles(
id,
(data) => {
console.log("name : " + data.name + ", role : " + data.role);
},
(error) => {
console.log(error);
}
);
},
(error) => {
console.log(error);
}
);
問題点:可読性↓、非同期ロジックに非同期ロジックを追加します.Reference
この問題について(JavaScript同期/非同期), 我々は、より多くの情報をここで見つけました https://velog.io/@2je0/JavaScript-동기비동기-Callbackテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol