我需要在一个循环中处理多个异步操作。我使用这些异步操作来等待它们串行执行。我想要的结果是循环是串行的,每个循环中的异步操作是并行的,但是结果全都被串了起来。如何解决这种情况?
对不起,我英语不好。我通过谷歌翻译。
在每个循环中,我使用await来处理Promise,该Promise具有异步操作。但是它们都是串行的。
我的代码是这样的:
var func1 = function(){return new Promise(function(resolve, reject){
//After 10s print(1);
loadRes("resname_1",
(res)=>{print(1); resolve(res);},
(err)=>{reject(err);});
})}
var func2 = function(){return new Promise(function(resolve, reject){
//After 10s print(2);
//some async operation like above
})}
var func3 = function(){return new Promise(function(resolve, reject){
//After 10s print(3);
//some async operation like above
})}
var test = async function(){
//some code...;
await func1;
//some code...;
await func2;
await func3;
}
for(let i = 0; i < 3; ++i){
test();
}
我得到的结果:111222333,总秒数:90
我想要的是:123 123 123,总秒数:大约30
您似乎正在寻找一致启动异步操作,然后让它们并发运行,同时等待的过程Promise.all
。然后await
循环的每次迭代:
for (let i = 0; i < 3; ++i){
//some code...;
const [a,b,c] = await Promise.all([
func1(),
func2(),
func3(),
]);
console.log(a+b+c); // to ensure the expected order
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句