【问题标题】:(async () => { })(); vs callback(异步 () => { })();与回调
【发布时间】:2019-07-17 04:24:21
【问题描述】:
async function test() {
  for (var i = 0; i < balance; i++) {      
    (async () => {            
      var a = await this.test1(i);
      var b = await this.test2(a);
      var c = await this.test3(b);  
      this.doThis(a,b,c);                              
    })();
  }
}

所以我得出结论,(async () =&gt; {})(); 与一个很好的旧回调非常相似

function test() {
  for (var i = 0; i < balance; i++) {      
    test1().call().then((a) => {           
      test2().call(a).then((b) => {
        test3().call(b).then((c) => {
           this.doThis(a,b,c);   
         });
      });
    });
  }
}

这是对的吗?在性能方面,我发现它们大致相同。

  1. 他们有什么不同吗?
  2. 我应该遵循什么模式?

我想使用第一个 async/await,但如果我取出 (async () =&gt; {})();,我发现在 UI 中渲染内容比第二个要慢。

【问题讨论】:

  • 如果你添加一些循环/ifs,第一种模式很容易做到,但第二种模式会很痛苦。有人说async/awaut 只是语法糖,虽然这适用于某些情况(例如你的情况),但它并不真正适用于更复杂的情况。

标签: javascript callback async-await


【解决方案1】:

他们有什么不同吗?

您应该在then 回调中使用return,这样错误才能正确传播。除此之外,他们基本上是平等的。

我应该遵循什么模式?

他们都是fire-and-forget calls,你不应该忘记 处理错误!

我想使用async/await,但如果我取出(async () =&gt; {})();,我会发现它更慢

当然,因为你在循环中awaiting,所以它变得连续。

【讨论】: