所以我一直在尝试使用 Promise.all()
方法,但遇到了一个问题,我需要向该方法传递一组 promise ,但我没有确定应用程序将调用/需要多少个 Promise。
这是我通过专门构建数组而获得的方法
router.post('/test1', (req, res, next) => {
console.log('Hit on POST /test1');
let arr = ['email1@email.com','email2@email.com'];
Promise.all([
lookUpUserId(arr[0]),
lookUpUserId(arr[1])
]).then((x)=>{res.send(x)});
});
我的 lookUpUserId()
函数返回一个 promise ,如果我在数组中明确列出它们,我就可以使用它。不过,我尝试了几种动态创建此数组的方法,但似乎无法使其正常工作。
示例#1
router.post('/test1', (req,res,next) => {
console.log('Hit on POST /test1');
let arr = ['email1@email.com','email2@email.com'];
Promise.all((arr)=>{
let out = [];
for(let i=0; i<arr.length; i++){
out.push(lookUpUserId(arr[i]));
}
return out;
}).then((x)=>{res.send(x)});
});
示例2
outer.post('/test1', (req,res,next) => {
console.log('Hit on POST /test1');
let arr = ['email1@email.com','email2@email.com'];
let promArr = (arr)=>{
let out = [];
for(let i=0; i<arr.length; i++){
out.push(lookUpUserId(arr[i]));
}
}
Promise.all(promArr).then((x)=>{res.send(x)});
});
最佳答案
您可以使用Array.prototype.map()
,其中lookUpUserId
函数的第一个参数预计是arr
router.post('/test1', (req, res, next) => {
console.log('Hit on POST /test1');
let arr = ['email1@email.com','email2@email.com'];
Promise.all(arr.map(lookUpUserId))
.then(x => res.send(x));
});
第二种方法的问题是您不调用函数、将数组作为参数传递给函数,或从函数返回 out
数组
outer.post('/test1', (req,res,next) => {
console.log('Hit on POST /test1');
let arr = ['email1@email.com','email2@email.com'];
let promArr = arr => {
let out = [];
for(let i=0; i<arr.length; i++) {
out.push(lookUpUserId(arr[i]));
}
return out // `return` the array of `Promise` objects
}
Promise.all(promArr(arr)).then(x => res.send(x));
});
关于javascript - 即时为 Promise.all() 构建一系列 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395085/