Javascript 洛达斯地图中的承诺

Javascript 洛达斯地图中的承诺,javascript,node.js,promise,lodash,Javascript,Node.js,Promise,Lodash,我正在使用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.

我正在使用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);

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

您忘记了从映射函数返回。数组不应该是空的,但应该包含承诺。

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

var数组=[];
_.地图(数据、功能(d、i){
getFromMyAPI(d[4])
.然后(函数(结果){
array.push({
id:d[0],
zoneLat:d[2],
zoneLon:d[3],
wifiLat:结果a,
威菲隆:结果
}); 
});

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

您应该将此数组视为Promise的结果,Promise以某种方式链接到
getFromMyAPI
调用的所有结果。在某种程度上,最好使用一些高级promise库来完成,这些库提供了功能版本的classing map/reduce,而不是像bluebird这样的promise

使用蓝鸟的示例:

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);
});

抱歉,我忘了提到参数与映射迭代器链接,我已经更新了源代码,在这种情况下,您需要分配返回的值。我已经编辑了代码。