【发布时间】:2018-03-02 08:09:16
【问题描述】:
我正在进行代码更改以将 .then(func{}) 样式代码转换为异步等待。
在我的示例中,从 then 转换为 async await,消除了并行查询 API 并按照请求完成的顺序处理它们的能力,因为两个请求彼此独立。
这是两种语法之间的有效区别,还是只是将两个函数分解为两个单独的异步函数以使它们并行运行?
升级前的示例代码:
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
编辑:
如果函数一分为二,async loadList1(),async loadList2()
在没有await这个词的情况下调用这两个函数是否正确使用,这将导致两个请求(几乎)同时提交?
【问题讨论】:
-
您可以使用 Promise.all 两者结合请求以保持并行处理它们。但是如果你想在其中一个完成后立即做某事,你最好单独处理 Promise。如果你不需要它,那么让它连续是没有意义的。
-
@IngoBürk 如果在两者都完成后我不需要做任何事情,我还需要使用 Promise.all 调用它们还是可以不使用 await 调用这些函数?
标签: javascript node.js reactjs asynchronous