Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
94
rated 0 times [  96] [ 2]  / answers: 1 / hits: 25288  / 8 Years ago, wed, november 16, 2016, 12:00:00

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.


More From » node.js

 Answers
171

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]) {

});

[#60036] Tuesday, November 15, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
stacie

Total Points: 476
Total Questions: 92
Total Answers: 102

Location: Bosnia and Herzegovina
Member since Tue, Mar 29, 2022
2 Years ago
stacie questions
Fri, Jun 26, 20, 00:00, 4 Years ago
Thu, Jan 23, 20, 00:00, 4 Years ago
Fri, Aug 30, 19, 00:00, 5 Years ago
Fri, Aug 2, 19, 00:00, 5 Years ago
;