我已经嵌套了数组,我可以检索第二层数组的承诺,但也不确定在顶层完成后如何实现then。
result.forEach(function(entity){ // outer list ???
return Promise.all(entity.urls.map(function(item){
return requestURL(item.href);
}));
});例如,如果results有两个或两个以上的项,并且每个item都有10个或更多的urls可获取,那么我们将如何为所有承诺实现then of [Promise.all][1]。请给我原生溶液。
基本上是以正确的方式处理嵌套的承诺数组。
数据结构:
var result = [
{
urls: [
{href: "link1"},
{href: "link2"},
{href: "link3"}
]
},
{
urls: [
{href: "link4"},
{href: "link5"},
{href: "link6"}
]
}
];发布于 2016-07-18 02:54:30
使用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,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(function*() {
for(var entity of arr)
for(var item of entity.subarr)
yield processAsync(item);
}()).then(function(data) {
console.log(data);
});
https://stackoverflow.com/questions/38427761
复制相似问题