ES7非同期と待ちます

非同期和のawait

あなたは、関数の非同期を追加する場合、関数は約束を返します。

async function test() {
  return "1"
}
console.log(test()) 
// -> Promise {<resolved>: "1"}

非同期は、次のラップされた関数Promise.resolve()の戻り値であり、プロセスは同じ値に戻り、そしてのみ支持非同期の使用を待ちます。

async function test() {
  let value = await sleep()
}

非同期とは非同期約束の直接の使用に比べて最終的な解決策は、呼び出しチェーンを処理することの利点は、より明確にすることができ、正確結局、コードを書く、そして非常に病気の多くを書き込み、またできると言うことができる待ちます問題へのコールバック地獄エレガントなソリューション。

もちろん、いくつかの欠点があるため、ある非同期コードを待つが、同期コードに変換され、複数の非同期コード場合はパフォーマンスの低下の使用に依存しない待つためにつながります。

async function test() {
  // 以下代码没有依赖性的话,完全可以使用 Promise.all 的方式
  // 如果有依赖性的话,其实就是解决回调地狱的例子了
  await fetch(url)
  await fetch(url1)
  await fetch(url2)
}

使用例を見て待っています:

let a = 0
let b = async () => {
  a = a + await 10
  console.log('2', a)
}
b()
a++
console.log('1', a)

//先输出  ‘1’, 1
//在输出  ‘2’, 10
  • = 0が保存されたときにように第1の機能Bは、発電機は、物事のスタックを維持する内部発電機を実現待つため、可変又はゼロの前に10で実行を待つために、最初に実行しました
  • 待つ非同期動作が、次に発現が約束を返さないので、Promise.reslove(戻り値)に包装なり、その後、同期コードは、外側の関数である実行します
  • 同期コードが保存され、この時間A = 0 + 10を使用するように入れ、開始値非同期コードの完了後++で印刷を行います

内部上述の説明は、発電機を実現待つ、実際には、発電機は糖衣構文の約束、および自動実行ジェネレータの内部実装と結合されて待ちます

コード解析の問題

function wait() {
  return new Promise(resolve =>
    setTimeout(resolve,  1000)
  )
}

async function main() {
  console.time();
  const x = wait();
  const y = wait();
  const z = wait();
  await x;
  await y;
  await z;
  console.timeEnd();
}
main();

回答:出力時間:秒より少し。
理由:3ウェイト機能割り当てがすでに実装され始めていました。

わずかに変更されたあなたは、以上の3×1000ミリ秒の結果を得ることができるもの

function wait () {
  return new Promise(
    resolve => setTimeout(resolve,  1000)
  )
}

async function main () {
  console.time()
  const x = await wait()
  const y = await wait()
  const z = await wait()
  console.timeEnd()
}

main()

おすすめ

転載: www.cnblogs.com/nayek/p/11728872.html