Javascript (异步()=>;{}();这是什么?

Javascript (异步()=>;{}();这是什么?,javascript,async-await,Javascript,Async Await,将方法(test1、test2、test3)放在async()=>{})(中意味着什么? 我发现它比以前快 async function test() { (async () => { var a = await this.test1(); var b = await this.test2(a); var c = await this.test3(b); this.doThis(a,b,c);

将方法(test1、test2、test3)放在
async()=>{})(
中意味着什么? 我发现它比以前快

async function test() {
  (async () => {            
    var a = await this.test1();
    var b = await this.test2(a);
    var c = await this.test3(b);  
    this.doThis(a,b,c);                              
  })();
}

使用它有什么坏处吗?

两者都返回一个承诺,但返回的承诺不同

第一个将返回一个承诺,该承诺可能在
this.test1()
的结果解析之前解析

第二个函数返回一个承诺,该承诺仅在最后一次调用this.doThis(a,b,c)后解析

这被称为“”:

通常在应用程序开发中,您希望一个进程调用另一个线程并继续进程流,而无需等待被调用线程的响应。这种模式被称为“开火并忘记”模式

你可以从中看到这一点

函数日志(str){
返回新承诺((解决)=>{
设置超时(()=>{
console.log(str);
解析(空);
}, 0);
});
}
异步函数a(){
等待Logfinally('in a 1');
等待Logfinally('in a 2');
等待Logfinally('in a 3');
返回等待日志(a的结尾);
}
异步函数b(){
(异步()=>{
等待最后的结果(“在B1中”);
等待Logfinally(“在B2中”);
等待Logfinally(“在B3中”);
})();
返回等待日志(b结束);
}
a();

b()它看起来更快,因为返回的承诺实际上并不等待任何顺序逻辑。您还可以将其更改为同步函数,因为返回的承诺基本上是一个
返回承诺.resolve()在第一种情况下,它一点用处都没有。如果它一点用处都没有,什么时候应该使用
(async()=>{})()?在顶层,当您想要访问
异步
/
等待
语法时。如果该表达式存在于另一个函数中,则表示该函数的调用方将无法知道异步调用何时完成。谢谢。仍然不确定什么时候应该使用
(async()=>{})()甚至在它解析this.test1()之前,这不是意味着
这是(a,b,c)会出错吗?@bbusdriver我添加了一条关于“开火并忘记”模式的注释。我认为它符合你例子中的情况。@MikeSamuel关于“开火并忘记”模式,外部函数通常不是同步的吗?它没有理由回报一个不等待任何东西的承诺。@bbusdriver。全体成员返回的承诺可能在test1解决之前解决。内部lambda中的等待链仍然按照
await
语句所暗示的顺序进行。
async function test() {          
  var a = await this.test1();
  var b = await this.test2(a);
  var c = await this.test3(b);  
  this.doThis(a,b,c); 
}