.then(func {})スタイルのコードを非同期待ちに変換するコードを変更しています。Javascript - async await vs promiseコールバック
私の例では、async awaitに変換すると、APIに並行してクエリを実行する機能が削除され、2つの要求が互いに独立しているため、リクエストが終了した順に処理されます。
これは2つの構文の間で有効な違いですか、または2つの関数を2つの個別の非同期関数に分解して、の並列をで実行するかどうかですか?アップグレード前
サンプルコード:アップグレード後
componentDidMount() {
this.loadLists();
}
loadLists() {
console.log('start 1');
api.get('/url/1').then(function(r) {
console.log('done 1', r.body);
});
console.log('start 2');
api.get('/url/2').then(function(r) {
console.log('done 2', r.body);
});
}
//OUTPUT
//start 1
//start 2
//done 1
//done 2
サンプルコード:
componentDidMount() {
this.getLists();
}
async getLists() {
console.log('start 1');
var res = await api.get('/url/1');
console.log('done 1', res.body);
console.log('start 2');
var res2 = await api.get('/url/2');
console.log('done 2', res2.body);
}
//OUTPUT
//start 1
//done 1
//start 2
//done 2
EDIT:関数は2、async loadList1()
に分割されている場合は、async loadList2()
は(ほぼ)同時に提出された2つの要求をもたらすこと、言葉await
適切な使用せずに両方の機能を呼び出していますか?
Promise.allを使用すると、2つの要求を組み合わせて並列処理を続けることができます。しかし、そのうちの1つが終了するとすぐに何かをしたい場合は、約束を個別に処理する方が良いです。あなたがそれを必要としないなら、それを連続させることには何の意味もありません。 –
@IngoBürk両方が完了しても何もする必要がない場合でも、Promise.allを使用して呼び出す必要がありますか、またはawaitを使用せずにこれらの関数を呼び出すことはできますか? –