所以我一直在尝试使用Promise.all()
方法,而我遇到了一个需要将方法传递给一系列承诺的问题,但我不确定应用程序将要求/需要多少个承诺。
这是我通过专门构建数组而开始工作的方法
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()
函数正在返回一个承诺,如果我在数组中明确列出它,我就可以使用它。但是我已经尝试了一些动态创建这个阵列的方法,但我似乎无法让它工作。
示例#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)});
});
答案 0 :(得分:0)
您可以使用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));
});
答案 1 :(得分:0)
在两种情况下都是同样的问题....你实际上并没有调用函数调用,因此你永远不会将数组传递给Promise.all。
使用第二个示例,纯粹是因为它更容易演示修复,请尝试:
Promise.all(promAll(arr))
.then(...)
.catch(...)