Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 处理节点Js中的动态承诺数_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 处理节点Js中的动态承诺数

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)。然后((数据)=>{ 如果(数据下一页){ //将此

我从一堆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);