Thursday, February 21, 2019

node.js - Promise.all in JavaScript: How to get resolve value for all promises?

Answer


Answer




I wrote the following node.js file:



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



As you can see, I use Promise.all in order to wait for both operations of reading the csv files. I don't understand why but when I run the code the line 'console.log(result)' is not committed.



My second question is I want that the callback function of Promise.all.then() accepts two different variables, while each one of them is the result of the relevant promise.


Answer



First question



Promise.all takes an array of promises



Change:




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


to (add [] around arguments)



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



Second question



The Promise.all resolves with an array of results for each of the promises you passed into it.



This means you can extract the results into variables like:



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

});


You can use ES6+ destructuring to further simplify the code:



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

});


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...