javascript - JavaScript : How to get resolve value for all promises? 中的 Promise.all

标签 javascript node.js ecmascript-6 promise bluebird

我编写了以下 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 的结果。

最佳答案

第一个问题

Promise.all 采用一组 promise

改变:

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 解析结果数组。

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

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+ destructuring进一步简化代码:

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

  });

关于javascript - JavaScript : How to get resolve value for all promises? 中的 Promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643386/

相关文章:

javascript - 需要帮助转换为 Twitter API v1.1 - JavaScript

javascript - 如何防止选择表单被更改,直到 Vue 中的对话框完成

javascript - 通过 javascript 删除父节点(一种新方法)

javascript - 如何获取前台进程/窗口的标题

javascript - 如何将数组与 setState 一起使用?

javascript - 为什么 node.js `fs.existsSync` 在用 promise 包装时不能正常工作?

node.js - 在 ExpressJS 中组合来自多个文件的路由?

node.js - 如何创建对话流对话来进行价格估算

javascript - 多个 ID 和类共享 AddEventListener

Javascript 数组解构和 Object.entries