在 'then' 函数中访问外部变量

Accessing outside variables inside the 'then' function

我是 nodejs 新手。使用 bluebird 承诺获得一组 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 变量?错误说 'path' 未定义。

执行此操作的最佳方法是将您需要的数据从承诺链的一部分打包到发送到链的下一部分的解析值中。在使用 Promise.map() 的情况下,您要将数据数组发送到 .then() 处理程序,因此将每个 path 传递到下一阶段的最干净的方法是使其成为每个数据的一部分Promise.map() 正在解析的数组条目。看来您可以将它添加到 bucketStat 数据结构中,并带有额外的 .then() ,如下所示。当您获得与路径对应的数据时,然后将路径添加到该数据结构中,以便稍后在遍历所有结果时,每个对象都有 .path 属性。

你在这里没有显示任何实际结果,所以我不知道你最终想要得到什么,但希望你能从中得到大致的想法。

此外,我切换到 Promise.mapSeries(),因为当您希望并发设置为 1 时,这是一个快捷方式。

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