元のテキストを参照:
https://blog.csdn.net/sinat_17775997/article/details/60609498
jsでは、Promiseを使用して非同期操作を容易にすることができますが、データAを1回要求し、データの取得後にデータBを要求するなど、2つの非同期操作の間に関係がある場合があります。
上記の問題を解決するために、以前は、データを要求する当時のPromiseで新しいPromiseを要求することができました。これは完全に大丈夫ですが、元のコールバック地獄に戻るかのように、コードは非常にエレガントに見えません。es7は、上記の問題をより簡単に解決するための非同期待機を提供します。最初にコードを見てください
var test=async function () {
await new Promise(function(resolve,reject){
setTimeout(function(){
console.log('111')
resolve('111')
},5000)
}).then((data)=>console.log('task1 end'))
await new Promise(function(resolve,reject){
setTimeout(function(){
console.log('222')
resolve('222')
},5000)
}).then((data)=>console.log('task2 end'))
}
test()
コード内のテスト関数は非同期で装飾されており、これが非同期メソッドであることを示しています。awaitキーワードは、同期メソッドでのみ使用できます。
awaitキーワードは、非同期コードの実行を待機するために使用できます。実際には、それはpromise解決を待機しています。戻り値は、promise解決が処理された後の最終的な戻り値です。関数はawaitを実行した後、await関数の実行が完了するのを待ってから下方向に実行を継続し、待機中はブロックされず、他の関数は正常に実行できます。