一尘不染

JavaScript中的Promise.all:如何获得所有承诺的解决价值?

node.js

我编写了以下node.js文件:

var csv = require('csv-parser');
var fs = require('fs')
var Promise = require('bluebird');
var filename = "devices.csv";
var devices;

Promise.all(read_csv_file("devices.csv"), read_csv_file("bugs.csv")).then(function(result) {
    console.log(result);
});


function read_csv_file(filename) {
    return new Promise(function (resolve, reject) {
            var result = []
            fs.createReadStream(filename)
                .pipe(csv())
                .on('data', function (data) {
                    result.push(data)
                }).on('end', function () {
                resolve(result);
            });
    })
}

如您所见,我Promise.all为了等待读取csv文件的两种操作而使用。我不明白为什么,但是当我运行代码时,该行'console.log(result)'未提交。

我的第二个问题是我希望的回调函数Promise.all.then()接受两个不同的变量,而每个变量都是相关promise的结果。


阅读 229

收藏
2020-07-07

共1个答案

一尘不染

第一个问题

Promise.all 兑现承诺

更改:

Promise.all(read_csv_file("devices.csv"), read_csv_file("bugs.csv"))

到(添加[]参数)

Promise.all([read_csv_file("devices.csv"), read_csv_file("bugs.csv")])
// ---------^-------------------------------------------------------^

第二个问题

Promise.all与结果为每个传递给它的承诺数组缓解。

这意味着您可以将结果提取到如下变量中:

Promise.all([read_csv_file("devices.csv"), read_csv_file("bugs.csv")])
  .then(function(results) {
    var first = results[0];  // contents of the first csv file
    var second = results[1]; // contents of the second csv file
  });

您可以使用ES6 + 解构来进一步简化代码:

Promise.all([read_csv_file("devices.csv"), read_csv_file("bugs.csv")])
  .then(function([first, second]) {

  });
2020-07-07