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