我编写了以下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
'console.log(result)'
我的第二个问题是我希望的回调函数Promise.all.then()接受两个不同的变量,而每个变量都是相关promise的结果。
Promise.all.then()
第一个问题
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]) { });