promise.all() 的返回结果未捕获作用域变量

returned results from promise.all() does not capture scoped variable

我在从 queryArray 捕获每个 id 并将其与 return promise 结果一起存储时遇到问题。

getSavedQueries: function(req, res) {
    SPromise.then(function(client) {
      const SavedQuery = client.Reports;
      var queryArray = req.query.queryArray; // ['123', '234', '456']
      var payloadObj = {};
      var actions = lo.map(queryArray, function(id) {
        var queryID = Number(id);
        *payloadObj['ID'] = queryID;* <--- not sure where to put this
        return SavedQuery.findOne(queryID).then(function(result){
          payloadObj['query'] = result;
          return payloadObj
        });
      });
      return Promise.all(actions);
    }).then(function(result){
      return res.json(result)
    });
  }

my res.json(result) returns 所有三个对象的数组中的最后一项:

[ {ID: 456, query: ...}, 
  {ID: 456, query: ...}, 
  {ID: 456, query: ...}]

而不是:

  [ {ID: 123, query: ...}, 
    {ID: 234, query: ...}, 
    {ID: 456, query: ...}]

问题是 payloadObj 是在地图回调之外定义的。因此,同一对象在映射回调期间发生变异,并从在映射回调中创建的承诺上调用的 then 方法返回,因此传递给 Promise.all 的数组包含 3 个承诺全部解析为 相同的对象 ,其 ID 属性 将是数组中的最后一个 ID(因为此映射回调是最后调用的)并且其 query 属性 将是最后一次成功请求的结果(可能但不一定是最后一次请求)。