我是nodejs的新手。使用bluebird promises获取HTTP API调用数组的响应,并将派生结果存储在ElasticSearch中。
一切正常,但我无法访问'then'函数中的变量。以下是我的代码:
Promise.map(bucket_paths, function(path) {
this.path = path;
return getJson.getStoreJson(things,path.path);
}, {concurrency:1}).then(function(bucketStats){
bucketStats.map(function(bucketStat) {
var bucket_stats_json = {};
bucket_stats_json.timestamp = new Date();
bucket_stats_json.name = path.name ==> NOT WORKING
});
});
如何在'then'中访问path.name变量?错误说“路径”未定义。
答案 0 :(得分:1)
执行此操作的最佳方法是将您需要的数据从promise链的一部分打包到发送到链的下一部分的已解析值中。在您使用Promise.map()
的情况下,您正在向.then()
处理程序发送一组数据,因此将每个path
传递到下一阶段的最简洁方法是将其作为每个Promise.map()
的一部分bucketStat
正在解析的数组条目。您可以将其添加到.then()
数据结构中,并添加.path
,如下所示。当您获得与路径对应的数据时,然后将路径添加到该数据结构中,以便稍后当您浏览所有结果时,每个对象都有Promise.mapSeries()
属性。
你没有在这里显示任何实际结果,所以我不知道你最终会想到什么,但希望你可以从中得到一般的想法。
此外,我切换到Promise.mapSeries(bucket_paths, function(path) {
return getJson.getStoreJson(things,path.path).then(bucketStat => {
// add the path into this item's data so we can get to it later
bucketStat.path = path;
return bucketStat;
});
}).then(function(bucketStats){
return bucketStats.map(function(bucketStat) {
var bucket_stats_json = {};
bucket_stats_json.timestamp = new Date();
bucket_stats_json.name = bucketStat.path.name;
return bucket_status_json;
});
});
,因为当你想要将并发设置为1时,这是一个快捷方式。
override