#3 Syntax (3) - Callback quiz, Object
17521 ワード
Callback
コードごとに優先度が異なるため、コードを順番に実行するにはasync、promiseを理解する必要があります.
とても重要です!!!
写真ソース
一般コード>Promise(マイクロ)>settimeOut(一般)
message(callback) queue = microtask queue & regulartask queue
ミクロ運転は従来より先である.(優先度が高い)
micro => promise, async
regular => setTimeOut
Warm-up Race
console.log("Horse A");
console.log("Horse B");
console.log("Horse C");
-> a - b - c (synchronous)Race 1
setTimeout(() => console.log("Horse A"), 1000)
console.log("Horse B")
-> b - asettimeout pushから呼び出しスタックへ
Web APIに送信してバックグラウンド操作を行う
1000ミリ秒後にタスクを完了
コールバックキューに移動
b pushから呼び出しスタックへ
b運転
event loop call stackが空であるかどうかを確認します->空です.
callback queueをポーリングしpush->aを
Race 2
setTimeout(() => console.log("Horse A"), 0)
console.log("Horse B")
-> b - asettimeout pushから呼び出しスタックへ
Web APIに送信してバックグラウンド操作を行う
0ミリ秒後にタスクが完了
コールバックキューに移動
b pushから呼び出しスタックへ
b運転
event loop call stackが空であるかどうかを確認します->空です.
callback queueをポーリングしpush->aを
Race 3
setTimeout(() => console.log("Horse A"), 0);
wait60Seconds(); //some incredibly expensive synchronous computation
console.log("Horse B")
-> b - ajsでは、常に同期作業を優先します.イベントループにどれくらい時間がかかるかにかかわらず、スタックにプッシュされた同期関数のクラスがある場合、非同期タスクはキューから削除されません.
settimeout pushから呼び出しスタックへ
Web APIに送信してバックグラウンド操作を行う
0ミリ秒後にタスクが完了
コールバックキューに移動
义齿
wait()->60秒の実行
b pushから呼び出しスタックへ
b運転
event loop call stackが空であるかどうかを確認します->空です.
callback queueをポーリングしpush->aを
Race 4
const asyncOperation = fetch('something.com');
asyncOperation.then((resolvedValue) => console.log("Horse A"));
console.log("Horse B")
-> b - afetch, .then -> Promise
呼び出しスタックにプッシュ
Web APIに送信
b pushから呼び出しスタックへ
b運転
event loop call stackが空であるかどうかを確認します->空です.
callback queueをポーリングしpush->aを
Race 5
setTimeout(() => console.log("Horse A"), 0);
const promise = Promise.resolve();
promise.then(() => console.log("Horse B"));
console.log("Horse C")
-> c - b - asettimeout pushから呼び出しスタックへ
Web APIに送信してバックグラウンド操作を行う
0ミリ秒後にタスクが完了
コールバックキューに移動
コミットメントは呼び出しスタックにプッシュされます
Web APIに送信してバックグラウンド操作を行う
コールバックキューに移動
c pushから呼び出しスタックへ
うんてん
event loop call stackが空であるかどうかを確認します->空です.
コールバックキューではpromiseの優先度が高いため、bをポーリングし、呼び出しスタック上でpush->bを実行します.
event loop call stackが空であるかどうかを確認します->空です.
callback queue残りのaをポーリングし、push->aを呼び出しスタック
Race 6
setTimeout(() => console.log("Horse A"), 5)
const promise = new Promise((resolve) => {
setTimeout(() => resolve(), 10)
})
promise.then(() => console.log("Horse B"))
console.log("Horse C")
-> c - a - bsettimeout pushから呼び出しスタックへ
Web APIに送信してバックグラウンド操作を行う
5ミリ秒後にタスクが完了
コールバックキューに移動
コミットメントは呼び出しスタックにプッシュされます
Web APIに送信してバックグラウンド操作を行う
10ミリ秒後にタスクを完了
コールバックキューに移動
c pushから呼び出しスタックへ
うんてん
event loop call stackが空であるかどうかを確認します->空です.
コールバックキューでは、aが最初に終了するので、aをポーリングして呼び出しスタックにプッシュする->a実行
event loop call stackが空であるかどうかを確認します->空です.
callback queue残りのbをポーリングし、push->bを呼び出しスタック
The Final Race
setTimeout(() => console.log("Horse A"), 0);
const promise = fetch("someUrl") // takes 100ms
promise.then(x => console.log("Horse B"));
waitFor200ms();
console.log("Horse C");
-> c - b - asettimeout pushから呼び出しスタックへ
Web APIに送信してバックグラウンド操作を行う
0ミリ秒後にタスクが完了
コールバックキューに移動
コミットメントは呼び出しスタックにプッシュされます
Web APIに送信してバックグラウンド操作を行う
100ミリ秒後にタスクを完了
コールバックキューに移動
wait()pushから呼び出しスタックへ
wait()実行->200ミリ秒待機
c pushから呼び出しスタックへ
うんてん
event loop call stackが空であるかどうかを確認します->空です.
callback queueでは、aとbの両方が終了し、優先度の高いbをポーリングすることによって呼び出しスタックに対してpush->b操作を実行する
event loop call stackが空であるかどうかを確認します->空です.
callback queue残りのaをポーリングし、push->aを呼び出しスタック
Bonus Race
async function someFn() {
const promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("Horse A"), 1000)
});
let result = await promise;
console.log(result);
}
setTimeout(console.log("Horse B"), 0)
someFn();
console.log("Horse C");
-> b - c - asettimeout pushから呼び出しスタックへ
0ミリ秒後すぐにタスクを完了->b実行
Web APIに送信してバックグラウンド操作を行う
コールバックキューに移動
somefn()pushから呼び出しスタックへ
promise->Web APIに送信してバックグラウンド操作を行う
1000ミリ秒後にタスクを完了
コールバックキューに移動
c pushから呼び出しスタックへ
うんてん
event loop call stackが空であるかどうかを確認します->空です.
callback queue aをポーリングし、call stack->実行
Object
constructor
オブジェクトに拡張します.ジェネレータはインスタンスを作成することもできます.
function + 첫 글자 대문자
と書きます.ex. function Todo() {}
this
通常は一番上のルート(window)を指します.
Windows:jsで使用されるすべての機能が含まれています.木の根元
->オブジェクトを指しますか?
Class
クラス内メソッドは
function
ではなく、메소드명()
と書きます.Inheritance
클래스명.prototype.함수이름
新しいインスタンスを作成するときは、コードのみを指します.インスタンスには、各コードがあるわけではありません.共通コードの使用を指します.(同じアドレスを共有)Reference
この問題について(#3 Syntax (3) - Callback quiz, Object), 我々は、より多くの情報をここで見つけました https://velog.io/@ffwang/JS-2-Syntax-3-Objectテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol