Javascript 一个承诺按顺序调用未知(动态)数量的异步方法

Javascript 一个承诺按顺序调用未知(动态)数量的异步方法,javascript,promise,Javascript,Promise,我想创建一个承诺,即在内部,按顺序调用一系列异步方法,并在最后一个方法返回后返回这些方法的结果,这些方法以有序数组连接 我试着这样做: const getArray=函数(thisArray){ 返回新承诺(功能(解决、拒绝){ if(thisArray.length{ 如果(thisArray.length>=3){ //全部完成 解析(此数组); }否则{ //做一些异步的事情。。。 设置超时(()=>{ //…添加结果 log('adding element'); thisArray.p

我想创建一个承诺,即在内部,按顺序调用一系列异步方法,并在最后一个方法返回后返回这些方法的结果,这些方法以有序数组连接

我试着这样做:

const getArray=函数(thisArray){
返回新承诺(功能(解决、拒绝){
if(thisArray.length<3){
setTimeout(函数(){
log('adding element');
thisArray.push(thisArray.length);
getArray(thisArray);
},  1000); 
}否则{
log(thisArray);
console.log('resolving');
解析(此数组);
}
});
}
getArray([])。然后(函数(数据){
console.log('thened');
控制台日志(数据);

})
你一点也不遥远,你只需要确保为每个
新承诺
调用
resolve
。如果您仍在构建数组,则通过递归
getArray
调用传递得到的承诺;否则,将传递数组:

const getArray=函数(thisArray){
返回新承诺((解决、拒绝)=>{
如果(thisArray.length>=3){
//全部完成
解析(此数组);
}否则{
//做一些异步的事情。。。
设置超时(()=>{
//…添加结果
log('adding element');
thisArray.push(thisArray.length);
//…然后递归
解析(getArray(thisArray));
}, 1000);
}
});
}
getArray([])。然后(数据=>{
console.log('done');
控制台日志(数据);

});解决一系列类似承诺(以及平行承诺)的一些答案。我不清楚那里的代码与您描述的您试图做的事情有何关联。@T.J.Crowder,您可以运行它。它使用递归来保证序列,并在将数组发送到resolve(.)调用之前构建数组,所以我认为我已经接近让它工作了。也许不是。也许整个结构都错了。我已经更新了。在你的真实场景中,你没有正在循环的现有信息吗?而不仅仅是从头开始创造东西?