节点:处理二维数组的承诺
Node: Process a 2D array of promises
我有一个二维数组 (2 X n) 的承诺,我想先处理第 1 行中的所有承诺,然后处理第 2 行中的所有承诺。
换句话说,我想在另一组 promise 完成执行后链接一组 promise。
我怎样才能做到这一点?
我尝试了以下方法,但它不起作用。有什么想法吗?
Promise.resolve()
.then(createPromises)//generates topPromises= [ [p1, p2, p3], [p4,p5,p6]]
.then(function(topPromises){
Promise.all(topPromises[0])
.then(Promise.all[topPromises[1])
})
您可以使用一点点 pseudo-recursion 来解决这个问题。
本质上,您有一个函数可以完成一组承诺。完成后,您再次调用相同的函数,但使用下一组。
let promiseCount = 1;
function create() {
let n = promiseCount++;
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(n);
resolve();
}, 500 * n);
});
}
let groups = [
[create(), create(), create()],
[create(), create(), create()],
[create(), create(), create()]
];
(function runGroup(i) {
if (i < groups.length) {
Promise.all(groups[i])
.then(() => {
console.log('Group', i + 1, 'complete');
runGroup(i + 1);
});
}
})(0);
您错过了 return
,并且您在 .then
的
之一中传递了 Promise
而不是 function
Promise.resolve()
.then(createPromises)//generates topPromises= [ [p1, p2, p3], [p4,p5,p6]]
.then(function(topPromises){
return Promise.all(topPromises[0])
.then(() => Promise.all[topPromises[1]))
})
我不知道你到底需要什么,但你的代码可能看起来像这样:
cratePromises().reduce((topPromise, nestedPromises) => {
return topPromise.then(data => {
// data is empty array on first iteration and array of nestedPromises values on next iterations
return Promise.all(nestedPromises)
})
}, Promise.resolve([]))
我有一个二维数组 (2 X n) 的承诺,我想先处理第 1 行中的所有承诺,然后处理第 2 行中的所有承诺。
换句话说,我想在另一组 promise 完成执行后链接一组 promise。
我怎样才能做到这一点?
我尝试了以下方法,但它不起作用。有什么想法吗?
Promise.resolve()
.then(createPromises)//generates topPromises= [ [p1, p2, p3], [p4,p5,p6]]
.then(function(topPromises){
Promise.all(topPromises[0])
.then(Promise.all[topPromises[1])
})
您可以使用一点点 pseudo-recursion 来解决这个问题。
本质上,您有一个函数可以完成一组承诺。完成后,您再次调用相同的函数,但使用下一组。
let promiseCount = 1;
function create() {
let n = promiseCount++;
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(n);
resolve();
}, 500 * n);
});
}
let groups = [
[create(), create(), create()],
[create(), create(), create()],
[create(), create(), create()]
];
(function runGroup(i) {
if (i < groups.length) {
Promise.all(groups[i])
.then(() => {
console.log('Group', i + 1, 'complete');
runGroup(i + 1);
});
}
})(0);
您错过了 return
,并且您在 .then
的
Promise
而不是 function
Promise.resolve()
.then(createPromises)//generates topPromises= [ [p1, p2, p3], [p4,p5,p6]]
.then(function(topPromises){
return Promise.all(topPromises[0])
.then(() => Promise.all[topPromises[1]))
})
我不知道你到底需要什么,但你的代码可能看起来像这样:
cratePromises().reduce((topPromise, nestedPromises) => {
return topPromise.then(data => {
// data is empty array on first iteration and array of nestedPromises values on next iterations
return Promise.all(nestedPromises)
})
}, Promise.resolve([]))