JavaScriptはコールバック関数の終了待ちです.

986 ワード

コールバック関数の終了を待つか、コールバック関数の戻り値を使う場合があります.Promiseを使ってこの目標を実現することができます.
問題
コールバック関数を含む関数を考慮するtimeout(fun)
function timeout (fun) {
  setTimeout(fun.bind(this, 1), 1000)
}
コール機能は以下の通りです
timeout(function (num) {
  console.log(num)
})
console.log(2)
出力します
2
1
解決策
コールバック関数を含む関数をPromiseに置いて、その後のステートメントをthenに置くことができる.
new Promise((resolve, reject) => {
  timeout(function (num) {
    console.log(num)
    resolve()
  })
}).then(() => {
  console.log(2)
})
出力します
1
2
async&awiatを使うes7の新しい特性async awaitに関連して、またはyield coを利用してコードを簡略化することができる.
(async function main () {
  await new Promise((resolve, reject) => {
    timeout(function (num) {
      console.log(num)
      resolve()
    })
  })
  console.log('after', 2)
})()