Javascript 将两个承诺的结果输出到单个对象中
我有两个创建承诺的异步函数。两个函数使用相同的输入i 我将使用不同的输入值多次调用这些函数,我希望使代码尽可能高效,因此我希望将承诺排队,并使用Promise.all并行运行它们 但是,我希望得到一个结果作为最终输出,它将是一个对象数组,如下所示:Javascript 将两个承诺的结果输出到单个对象中,javascript,promise,Javascript,Promise,我有两个创建承诺的异步函数。两个函数使用相同的输入i 我将使用不同的输入值多次调用这些函数,我希望使代码尽可能高效,因此我希望将承诺排队,并使用Promise.all并行运行它们 但是,我希望得到一个结果作为最终输出,它将是一个对象数组,如下所示: [ { input: i, result1: result1, result2: result2 }, ... ] 我通过两个描述步骤完成了这一点: 异步函数function1i{ 返回i*i } 异步函数fu
[
{
input: i,
result1: result1,
result2: result2
},
...
]
我通过两个描述步骤完成了这一点:
异步函数function1i{
返回i*i
}
异步函数function2i{
返回i*i*i
}
异步函数主{
var承诺=[]
对于设i=0;i<10;i++{
让承诺=功能1i
.Then函数结果1{
返回{i:i,result1:result1}
};
承诺
}
var final=等待承诺。所有承诺
风险值承诺2=[];
对于设i=0;i<10;i++{
让承诺=功能2i
.然后函数结果2{
最终[i]['result2']=result2;
};
允诺;允诺;
}
等待承诺
控制台。日志最终
}
编辑:333的答案是正确的,不是我的。此解决方案在队列中将有2个批次 我想我明白了: console.logstart 功能睡眠{ 返回新PromiseSolve=>setTimeoutresolve,毫秒; } 异步函数function1i{ 等待2000年; 返回i*i } 异步函数function2i{ 等待2000年; 返回i*i*i } 异步函数主{ var承诺=[] 对于设i=0;i<10;i++{ 设a=function1i; 设b=function2i; 让承诺=承诺。全部[a,b]。然后 函数[resulta,resultb]{ 返回{i:i,result1:resulta,result2:resultb} }; 承诺 } var final=等待承诺。所有承诺 控制台。日志最终 } 主要 异步函数function1i { 返回i*i } 异步函数function2i { 返回i*i*i } 异步函数主 { 常量承诺=[]; 对于设i=0;i<10;i++ 承诺。功能1i,功能2i; const results=等待承诺。所有承诺; 常量数据=[]; 对于设i=0;i<10;i++ { 常量[result1,result2]=results.slicei*2,i*2+2; data.push{i,result1,result2}; } 控制台日志数据; }
主要的让ARRAY3=ARARY1.COCTATRAY2i在调用承诺之前,用约定1和承诺2来实现这一点。所有等待等待的承诺。谢谢你的评论,但是我一直没能让它工作。我已经更新了我的帖子,加入了一个运行的示例,以及我想要的最终结果。然而,我的猜测是代码效率不高。我的目标是学习如何更有效地减少到1个循环,只运行1个承诺。非常感谢您的解决方案,但我认为我的解决方案在1个循环中解决了问题。你发现它有什么问题吗?你的解决方案涉及到两个调用Promise.all的地方:首先在循环内部,然后在循环外部。这意味着您正在等待承诺对的完成,然后等待承诺对的完成。我不知道您需要多少性能,但这可能是一个瓶颈。这一点您是对的,但一旦您等待这样一个打包的承诺,它就会产生开销。当你等待一系列打包的承诺时,就像打开盒子里面的盒子一样。因此,您希望尽可能少地执行此操作。您是对的,我看到在我的网络跟踪中有两个单独的队列正在发生。让我来看看你的答案,谢谢你和我交谈。刚刚实现了它,它肯定更有效。我仍然讨厌运行第二个循环来重组承诺的线性阵列,但我想这正是你必须要做的。非常感谢。
[
{
input: i,
result1: result1,
result2: result2
},
...
]