2.3非同期順序分析

1647 ワード

コード解析

let a = 2;

const p = new Promise((resolve, reject) => {
	console.log('spearjin');
	setTimeout(() => {
    	a = 5;
        console.log(a);
        resolve(a);
    }, 0);
});
console.log('hello');
p.then((result) => {
	console.log("result: " + result);
});

* 결과 = spearjin, hello, 5, result: 5
* new Promise 함수선언과 호출을 같이 한다
* then메소드는 백그라운에 함수가 들어간다
さあ.今、絵を見て、どのように動いているのかを分析しましょう.
  • は、まず匿名で実行され、変数aおよびpを宣言する.
  • a=2,pは「new Promis」関数を宣言しながら呼び出される.
  • Promise関数を呼び出すと、コンソールが表示されます.log(「Spearjin」)が呼び出され、消えます.
  • settimeout関数が宣言され、バックグラウンドに格納されます.
  • console.ログ(「hello」)が実行され、消えます.
  • p.は、関数を呼び出し、p.はバックグラウンドに格納される.
  • 呼び出しスタック内の関数は匿名セットに消えます.
  • バックグラウンドの関数は、条件が満たされた場合に技術キューに移行される.
  • 承諾はマイクロキュー
  • である.
  • settimeoutはマクロキュー
  • である.
  • マクロキューは、まず呼び出しスタックに移行し、マクロキューが空である場合にのみ、マイクロキューは呼び出しスタックに移行する.
  • 呼び出しスタックでは、マクロキュー内のsettimeout()がイベントループによって呼び出しスタックに上昇する.
  • console.log(a)を呼び出すと消えます.
  • 解析関数を呼び出し、バックグラウンドのp.then()関数は条件を満たし、マイクロキュー
  • に移行する.
  • settimeout()関数が終了します.
  • マイクロキューのp.then()関数のマクロキューと呼び出しスタックは空であり、イベントループのため呼び出しスタックに移行する.
  • console.log(「result:」+result)が呼び出され、消えます.
  • p.then()関数終了