脚本
我有一个需要下载的URL数组,但每个URL也必须提供一个必须从服务器请求的唯一事务ID,并且只在请求成功时递增.
问题
当我循环遍历数组时,我需要等待事务ID的请求和文件的请求在开始循环的下一次迭代之前完成,但文件的数量不固定,因此需要动态构建链承诺.
伪代码
下面是一些伪代码,getFiles()是问题,因为所有请求都获得相同的事务ID,因为它们不等待先前的请求完成.
function getTransationId(){
return new Promise((resolve,reject)=> {
let id = getNextTransactionId();
if(id!=error){
resolve(id);
}else{
reject(error);
}
})
}
function getFile(url, transactionId){
return new Promise((resolve,reject)=>{
http.request(url+transactionId, function(err,response){
if(err){
reject(err);
}else{
resolve(response);
}
});
});
}
function getFilesFromArray(urlArray){
for(let url of urlArray){
getTransactionId().then(resolve=>getFile(url,resolve),reject=>console.error(reject));
}
}
Run Code Online (Sandbox Code Playgroud)
题
如何动态链接链承诺?
回答