Lodash 地图中的 Promise

Promise in Lodash map

我正在使用 Lodash 映射数组。在循环中,承诺从外部 API.

得到一些东西
var array = _.map(data, function (d, i) {
  getFromMyAPI(d[4])
  .then(function (results) {
    return {
      id: d[0],
      zoneLat: d[2],
      zoneLon: d[3],
      wifiLat: results.a,
      wifiLon: results.b
    }; 
  });
});

但是,如果我这样做

console.log(array);

当然,它显示的是一个空数组。映射完成后,如何获取此数组的内容?

您忘记了 return 地图功能。该数组不应为空,但应包含 Promises。

像这样更改它应该可以工作:

var array = [];
_.map(data, function (d, i) {
  getFromMyAPI(d[4])
  .then(function (results) {
    array.push({
      id: d[0],
      zoneLat: d[2],
      zoneLon: d[3],
      wifiLat: results.a,
      wifiLon: results.b
    }); 
  });
});

已编辑

我敢打赌您错过了 getFromMyApi 调用需要来自迭代的参数这一事实...让我们假设这是真的。

您应该将此数组视为 Promise 的结果,它以某种方式链接到 getFromMyAPI 调用的所有结果。不知何故最好使用一些高级承诺库提供分类的功能版本 map/reduce 而不是像蓝鸟这样的承诺。

使用蓝鸟的示例:

var Promise = require('bluebird');
return Promise.map(data, function(d,i) {
    return getFromMyApi(arguments, d).then(function(r) {
        return {
            id: d[0],
            zoneLat: d[2],
            zoneLon: d[3],
            wifiLat: r.a,
            wifiLon: r.b
        }; 
    })
}).then(function(array) {
   console.log("#2", array);
});