Javascript 洛达斯地图中的承诺
我正在使用Lodash映射数组。在循环中,有一个从外部API获取内容的承诺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.
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);
});
抱歉,我忘了提到参数与映射迭代器链接,我已经更新了源代码,在这种情况下,您需要分配返回的值。我已经编辑了代码。