Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步等待承诺。全部使用链_Javascript_Asynchronous - Fatal编程技术网

Javascript 异步等待承诺。全部使用链

Javascript 异步等待承诺。全部使用链,javascript,asynchronous,Javascript,Asynchronous,我有几个promise函数,我想做一个promise.all on和async wait。然而,我不知道如何做到这一点时,有一个'然后'链在其中之一 比如说 Promise.all([ promiseFn1(), promiseFn2().then(promiseFn3) ]) 当promiseFn2()链接在Promise.all中时,如何实现异步等待 我正在考虑制作一个令人烦恼的函数,但不希望: await Promise.all([ promise1.fn(),

我有几个promise函数,我想做一个promise.all on和async wait。然而,我不知道如何做到这一点时,有一个'然后'链在其中之一

比如说

Promise.all([
    promiseFn1(),
    promiseFn2().then(promiseFn3)
])
promiseFn2()
链接在
Promise.all中时,如何实现异步等待

我正在考虑制作一个令人烦恼的函数,但不希望:

await Promise.all([
   promise1.fn(),
   (() =>{ 
       p2response = await promise2Fn(); 
       return promise3Fn(p2response);
   })()
])

是的,立即执行的
async
函数表达式可以执行以下操作:

await Promise.all([
    promise1.fn(),
    (async () => promise3Fn(await promise2Fn()) )()
])
但是,我建议继续使用更简单的
.then()
调用。它不像任何东西强迫你到处使用
wait

或者,如果您正在寻找干净的代码(并且
然后
链不像示例中那样简单,而是涉及函数表达式),只需使用命名的帮助函数:

async function promise2and3fn() {
    return promise3Fn(await promise2Fn());
}
await Promise.all([
    promise1.fn(),
    promise2and3fn()
])

当您想同时使用
wait
时,无法绕过这些额外的函数,因为函数内部的执行始终是连续的。

是的,立即执行的
异步
函数表达式可以做到这一点:

await Promise.all([
    promise1.fn(),
    (async () => promise3Fn(await promise2Fn()) )()
])
但是,我建议继续使用更简单的
.then()
调用。它不像任何东西强迫你到处使用
wait

或者,如果您正在寻找干净的代码(并且
然后
链不像示例中那样简单,而是涉及函数表达式),只需使用命名的帮助函数:

async function promise2and3fn() {
    return promise3Fn(await promise2Fn());
}
await Promise.all([
    promise1.fn(),
    promise2and3fn()
])

当您想同时使用
wait
时,没有办法绕过这些额外的函数,因为函数内部的执行总是顺序的。

承诺。所有([promiseFn1(),promiseFn3(wait promiseFn2())])
?将
promiseFn3()
移到
then()
内部
promiseFn2()
@PatrickRoberts no,@Bergi这与第一个例子完全相同,不必如此迂腐。@PatrickRoberts我想迂腐是必要的,因为
promiseFn3(wait promiseFn2())
的行为与
promiseFn2()不同。然后(promiseFn3)
。考虑“<代码>约定”(<代码)>拒绝-这是一个微妙但重要的区别。<(CopyFeNF1(,),OpNoFeNF2())(<代码> > CopeNFN3)(<代码> > <代码> > /代码>内部>代码> CurrFunn2()/@ PATRIKRiBrts不,@ Bergi,与第一个示例完全一样,没有必要这么迂腐。@PatrickRoberts我想迂腐是必要的,因为
promiseFn3(wait promiseFn2())
的行为与
promiseFn2()不同。然后(promiseFn3)
。考虑一下<代码>允诺(<)/代码>拒绝-这是一个微妙但重要的区别。我同意,<代码>。()(代码)>调用比其他的非易读性要容易得多。我的例子极大地简化了允诺2和3,因此我想知道是否有一种干净的方式来写它。可能需要将其命名为函数。我同意,
.then()
调用比其他废话更容易阅读。我的示例大大简化了promise2和promise2,因此我想知道是否有一种干净的方法来编写它。可能需要将其命名为函数。泰