Javascript (异步()=>;{}();这是什么?
将方法(test1、test2、test3)放在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);
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()=>{})()如果它解决了这个问题,那么这个问题(a,b,c)代码>甚至在它解析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);
}