Javascript 为Promise.all()动态构建一系列承诺

Javascript 为Promise.all()动态构建一系列承诺,javascript,node.js,express,promise,Javascript,Node.js,Express,Promise,因此,我一直在尝试使用Promise.all()方法,我遇到了一个问题,需要向方法传递一系列承诺,但我不确定应用程序将调用/需要多少承诺 这里有一个方法,我是通过专门构建数组来实现的 router.post('/test1', (req, res, next) => { console.log('Hit on POST /test1'); let arr = ['email1@email.com','email2@email.com']; Promise.all([

因此,我一直在尝试使用
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)=>{
log('Hit-on-POST/test1');
设arr=['email1@email.com','email2@email.com'];
承诺。所有((arr)=>{
放出=[];
for(设i=0;i{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)});
});
outer.post('/test1',(req,res,next)=>{
log('Hit-on-POST/test1');
设arr=['email1@email.com','email2@email.com'];
让promArr=(arr)=>{
放出=[];
for(设i=0;i{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));
});
outer.post('/test1',(req,res,next)=>{
log('Hit-on-POST/test1');
设arr=['email1@email.com','email2@email.com'];
让promArr=arr=>{
放出=[];
for(设i=0;i res.send(x));
});

这两种情况下的问题是相同的……您没有实际调用函数调用,因此您永远不会将数组传递给Promise.all

使用第二个示例,纯粹因为更容易演示修复,请尝试:

Promise.all(promAll(arr))
    .then(...)
    .catch(...)

你创建了一个数组返回函数,而不是数组。我在这里清除了一大堆激烈的评论。不要继续发布它们。
Promise.all(promAll(arr))
    .then(...)
    .catch(...)