Javascript-异步等待vs承诺回调

Javascript-异步等待vs承诺回调,javascript,node.js,reactjs,asynchronous,Javascript,Node.js,Reactjs,Asynchronous,我正在做一个代码更改来转换.then(func{})样式的代码到async wait 在我的示例中,将从then转换为async await将取消并行查询API并按请求完成的顺序处理它们的能力,因为两个请求彼此独立 这是两个语法之间的有效区别,还是仅仅是将两个函数拆分为两个单独的异步函数,从而使它们并行运行 升级前的示例代码: componentDidMount(){ 这是loadLists(); } 加载列表(){ console.log('start 1'); get('/url/1')。

我正在做一个代码更改来转换.then(func{})样式的代码到async wait

在我的示例中,将从then转换为async await将取消并行查询API并按请求完成的顺序处理它们的能力,因为两个请求彼此独立

这是两个语法之间的有效区别,还是仅仅是将两个函数拆分为两个单独的异步函数,从而使它们并行运行

升级前的示例代码:

componentDidMount(){
这是loadLists();
}
加载列表(){
console.log('start 1');
get('/url/1')。然后(函数(r){
控制台日志(“完成1”,右主体);
});
console.log('start 2');
get('/url/2')。然后(函数(r){
控制台日志(“完成2”,右主体);
});
}
//输出
//开始1
//开始2
//完成1

//完成2在您的第一个代码中,只有第一个API调用的
then
块中的任务在API调用任务完成后执行,而其他代码行则执行。与第二个API调用类似

在第二个代码中

var res = await api.get('/url/1');
await API调用会在执行任何代码后阻塞该代码,除非其作业已完成

componentDidMount() {
  this.getLists();
}

async getLists() {     
  const data = await Promise.all([api.get('/url/1'),api.get('/url/2')]);
  console.log('1st API Response ----> ',data[0].body);
  console.log('2nd API Response ----> ',data[1].body);
}
因此,您并行执行两者的目标现在已经实现<代码>承诺。所有([])
都这样做。既然
Promise.all
返回一个承诺,您可以等待它


请不要忘记将函数包装在
try/catch
block

中。您可以执行以下操作:

async function getLists() {

  const [res, res2] = await Promise.all([
    api.get('url/1'),
    api.get('url/2')
  ])

}

wait
负责等待承诺得到解决。如果您想让请求并行运行,只需将两个请求踢出,然后等待它们:

console.log('start 1');
var res = api.get('/url/1');
console.log('start 2');
var res2 = api.get('/url/2');
console.log('done 1', (await res).body);
console.log('done 2', (await res2).body);
当然,这仍然会引入一些顺序依赖性,因为您总是在
res2
之前处理
res


如果你有更多的电话,
承诺。所有的
仍然是要走的路。请记住,
async/await
只是创建和解析承诺的语法糖。

您可以使用承诺。这两种方法都将请求合并,以保持并行处理。但是,如果你想在其中一个完成后马上做点什么,最好是单独处理承诺。如果您不需要按顺序执行,则没有意义。@IngoBürk如果两个函数都完成后我不需要执行任何操作,我是否仍然需要使用Promise.all调用它们?或者我可以不使用Wait调用这些函数吗?