理解异步和等待

时间:2018-10-01 14:06:07

标签: javascript asynchronous

我对JS还是陌生的,我想理解this.myProvider.login().subscribe(response => { if (response.status == 403) { this.loading.dismiss(); console.log("Access denied"); } this.loading.dismiss(); this.nav.setRoot('MainPage'); }, error => { this.loading.dismiss(); console.log(error); });

我在网上浏览了这篇了不起的文章,他们在concluded explaining此代码段

Async and Await

现在基于以上文章,我能够得出一些结论,并希望有人能验证它是否正确。

要使用function doubleAfter2Seconds(x) { return new Promise(resolve => { setTimeout(() => { resolve(x * 2); }, 2000); }); } async function addAsync(x) { const a = await doubleAfter2Seconds(10); const b = await doubleAfter2Seconds(20); const c = await doubleAfter2Seconds(30); return x + a + b + c; } addAsync(10).then((sum) => { console.log(sum); }); ,我们需要将其嵌套在await函数下吗? 异步解决链接问题?但是Async呢?那么什么使异步唯一/更好呢?

2 个答案:

答案 0 :(得分:1)

  

要使用await,我们需要将其嵌套在Async函数下吗?

是的,await关键字仅在async函数中可用

  

异步解决了链接问题?

它使代码看起来更简单

  

但是Promise.all也是如此吗?

您仍然可以将其与await一起使用,例如:

async function addAsync(x) {
  const [a, b, c] = await Promise.all([
    doubleAfter2Seconds(10), 
    doubleAfter2Seconds(20),  
    doubleAfter2Seconds(30)
  ]);
  return x + a + b + c;
}

在这种情况下,Promise.all中的所有promise都将被并行解决,并且您将在2秒内获得结果,而不是6秒。

答案 1 :(得分:1)

Promise.all等待并行处理每个promise,另一方面又等待一个接一个地完成,也就是说,如果您有许多不同的功能,而每个功能都严重依赖于前一个的值,则无法使用Promise.all在这种情况下。