我已经嵌套了数组,我能够检索第二级数组的promises,但不知道如何实现一次顶级的数组完成.
result.forEach(function(entity){ // outer list ??? return Promise.all(entity.urls.map(function(item){ return requestURL(item.href); })); });
例如,如果结果有两个或多个项目,并且每个项目有10个或更多要获取的网址,那么我们如何为所有承诺实现[Promise.all] [1].原生解决方案请.
基本上以正确的方式处理嵌套的promises数组.
数据结构:
var result = [ { urls: [ {href: "link1"},{href: "link2"},{href: "link3"} ] },{ urls: [ {href: "link4"},{href: "link5"},{href: "link6"} ] } ];
解决方法
使用map而不是forEach,并将其包装在另一个Promise.all调用中.
var arr = [ {subarr: [1,2,3]},{subarr: [4,5,6]},{subarr: [7,8,9]} ]; function processAsync(n) { return new Promise(function(resolve) { setTimeout( function() { resolve(n * n); },Math.random() * 1e3 ); }); } Promise.all(arr.map(function(entity){ return Promise.all(entity.subarr.map(function(item){ return processAsync(item); })); })).then(function(data) { console.log(data); });
var arr = [ {subarr: [1,Math.random() * 1e3 ); }); } Promise.all(function*() { for(var entity of arr) for(var item of entity.subarr) yield processAsync(item); }()).then(function(data) { console.log(data); });