javascript - 即时为 Promise.all() 构建一系列 Promise

标签 javascript node.js express promise

所以我一直在尝试使用 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/

相关文章:

node.js - Docker Node.js 应用程序未监听端口

javascript - 无法在 GoldenLayout 组件中加载 fin-Hypergrid

node.js - 是否可以让服务器运行 node.js 以在运行时安装和运行模块?

node.js - Windows 8 上的咕噜声 : 'grunt' is not recognized

javascript - 无法浏览部署到 Heroku 的 React 应用程序

javascript - Express.js 无法使用异步等待从查询 mysql 获取结果

node.js - NodeJS - 发送多个请求并在一个回调中处理所有响应

javascript - 找到与另一个变量的值相等的变量

javascript - js 在导入中默认使用异步

javascript - 如何在 Node JS 中接受大量 API 请求