JAvascript-非同期プログラミング(1)
4218 ワード
JavaScriptは同期されています.ブート後に処理コードを同期します.
関数宣言とはvarと関数宣言の最上位レベルである.
callbackには2種類あります.直ちに同期して実行されるSynchronous Callbackと、予測不可能なAsynchoronousがいつ実行されるか.
次にprintImmi()関数を作成し、パラメータを使用してprintというコールバック関数を受信し、すぐに実行します.次にprintImmi()を呼び出します.パラメータレスコンソール.出力logの関数を渡します.
出力1と3 hi、出力2.呼び出しプロセスを整理すると、実行時に関数宣言子が反発子になるため、最上位に移動します.
そして、1=>settimeout=>3=>printImmi(()=>consoleとなる.ログ("hi")=>print()=>2.
反発の観点から、関数宣言子は最上位に位置し、1出力=>settimeout()ブラウザ要求=>3出力=>printImmi(((()=>console.log(「hi」=>print(hi出力)=>printWithDelay()ブラウザリクエスト=>1秒後settimeout()=>2秒後printWithDelay()を実行
失敗した場合
に質問
コールバック内でコールし、読み取り可能性を失うと.エラーが発生した場合、デバッグも困難になります.
だからpromiseとawaitを使います.
ソース:https://www.youtube.com/watch?v=s1vpVCrT8f4&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=11
関数宣言とはvarと関数宣言の最上位レベルである.
callbackには2種類あります.直ちに同期して実行されるSynchronous Callbackと、予測不可能なAsynchoronousがいつ実行されるか.
Synchoronous call back
console.log("1")
setTimeout(() => console.log(2), 1000)
console.log(3)
function printImmi(print){
print()
}
printImmi(()=>console.log("hi")) // hi
Timeoutのコンソールと順番に実行するコンソールを設定します.ログがあります.子供たちは下図のように、まず1、3、1秒後に2を出力します.次にprintImmi()関数を作成し、パラメータを使用してprintというコールバック関数を受信し、すぐに実行します.次にprintImmi()を呼び出します.パラメータレスコンソール.出力logの関数を渡します.
出力1と3 hi、出力2.呼び出しプロセスを整理すると、実行時に関数宣言子が反発子になるため、最上位に移動します.
そして、1=>settimeout=>3=>printImmi(()=>consoleとなる.ログ("hi")=>print()=>2.
Asynchoronous
function printWithDelay(print, delay){
setTimeout(print, delay)
}
printWithDelay(()=>console.log("async callback"), 2000)
上のコードにprintWithDelay関数を追加しました.パラメータとしてprintとdelayを受け入れるsettimeout関数があります.printWithDelay関数を呼び出すときのconsole.出力log()の関数と2秒の遅延を与えると、反発の観点から、関数宣言子は最上位に位置し、1出力=>settimeout()ブラウザ要求=>3出力=>printImmi(((()=>console.log(「hi」=>print(hi出力)=>printWithDelay()ブラウザリクエスト=>1秒後settimeout()=>2秒後printWithDelay()を実行
地獄
class UserStorage {
loginUser(id, password, onSuccess, onError) {
setTimeout(() => {
if (
(id === "dongha" && password === 1234) ||
(id = "dongeun" && password === 1234)
) {
onSuccess(id)
} else {
onError(new Error("not found"))
}
}, 2000)
}
getRoles(user, onSuccess, onError) {
setTimeout(() => {
if (user === "dongha") {
onSuccess({
name: "dongha",
role: "admin"
})
} else {
onError(new Error("no access"))
}
}, 1000)
}
}
まずユーザのid,pass入力を受信する.その後サーバに転送し、ログイン後にonSuccessがログインIDを再取得します.受け取ったidリクエストをロールに渡します.またroleが正常に受信されると,ユーザのobjが受信される.const userStorage = new UserStorage()
const id = prompt("id")
const password = prompt("password")
userStorage.loginUser(
id,
password,
(user) => {
userStorage.getRoles(
user,
(userWithRole) => {},
(error) => {}
)
},
(error) => {
console.log(error)
}
)
メッセージを受信すると、ユーザーStorageが表示されます.loginユーザにid,passwordを渡し,成功時にユーザデータを受信するコードブロックと失敗時にコードブロックを作成する.userStorage.loginUser(
id,
password,
user => {},
error => {console.log(error)}
ユーザーがログインしている場合は、getRolesでユーザーの役割を果たす必要があります.その際にも、キャラクターを受け入れたことや失敗したことが伝わります.userStorage.loginUser(
id,
password,
user => {
userStorage.getRoles(
user,
(userWithRole) =>{
alert(`id = ${userWithRole.name}, role = ${userWithRole.role}`)
},
error => {console.log(error)}
)
},
error => {console.log(error)}
ログイン成功失敗した場合
に質問
コールバック内でコールし、読み取り可能性を失うと.エラーが発生した場合、デバッグも困難になります.
だからpromiseとawaitを使います.
ソース:https://www.youtube.com/watch?v=s1vpVCrT8f4&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=11
Reference
この問題について(JAvascript-非同期プログラミング(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@dongha1992/javascript-비동기-프로그래밍-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol