Javascript 处理节点Js中的动态承诺数
我从一堆URL获取产品数据。这些承诺的结果(以及产品详细信息)可能包含一个名为Javascript 处理节点Js中的动态承诺数,javascript,node.js,promise,Javascript,Node.js,Promise,我从一堆URL获取产品数据。这些承诺的结果(以及产品详细信息)可能包含一个名为nextPage的键,该键的值为URL。我也需要从那个URL获取数据。我如何等待基于nextPage键附加的所有原始承诺集+动态承诺 目前,我正在尝试以下方法: const allUrls=['url1','url2','url3']; 常量promiseArray=[]; const getData=(url)=>{ const p=axios.get(url)。然后((数据)=>{ 如果(数据下一页){ //将此
nextPage
的键,该键的值为URL。我也需要从那个URL获取数据。我如何等待基于nextPage
键附加的所有原始承诺集+动态承诺
目前,我正在尝试以下方法:
const allUrls=['url1','url2','url3'];
常量promiseArray=[];
const getData=(url)=>{
const p=axios.get(url)。然后((数据)=>{
如果(数据下一页){
//将此推到承诺中,以便数据不会丢失
promiseArray.push(Promise.resolve(data));
//有更多的页面可从中获取数据
返回getData(data.nextPage);
}
//没有其他页面,因此返回结果
返回数据;
});
返回p;
}
allUrls.forEach((url)=>{
const p=获取数据(url);
promiseArray.push(p);
});
Promise.all(promiseArray).then((数据)=>{
//错误:数据只有allUrls的值,而不是动态添加的数据
})
问题在于,当Promise.all
执行时,promiseArray
将只包含产品数据的承诺,而不包含细节。您需要wait
每个产品数据承诺,然后将结果承诺推送到数组中(注意,我使用的是async/wait
,因为它允许更干净的代码):
for (const url of allUrls) {
const p = await getData(url);
promiseArray.push(p);
}
const result = await Promise.all(promiseArray);
console.log(result);