Promise.all in [removed] How to get resolve value for all promises?

后端 未结 2 1553
再見小時候
再見小時候 2020-12-01 22:02

I wrote the following node.js file:

var csv = require(\'csv-parser\');
var fs = require(\'fs\')
var Promise = require(\'bluebird\');
var filename = \"device         


        
相关标签:
2条回答
  • 2020-12-01 22:16

    Answer to your second question:

    If you want the then callback to accept two different arguemnts, then you can use Bluebird and its spread method. See:

    • http://bluebirdjs.com/docs/api/spread.html

    Instead of .then(function (array) { ... }) and having to access array[0] and array[1] inside of your then handler you will be able to use spread(function (value1, value2) { ... }) and have both variables named as you want.

    This is a feature of Bluebird, it's not possible with plain Promise.

    You use Bluebird just like Promise, e.g.:

    var P = require('bluebird');
    // and in your code:
    return new P(function (resolve, reject) { ...
    // instead of:
    return new Promise(function (resolve, reject) { ...
    

    Of course you don't have to name it P but whatever you want.

    For more examples see the Bluebird Cheatsheets.

    0 讨论(0)
  • 2020-12-01 22:21

    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]) {
    
      });
    
    0 讨论(0)
提交回复
热议问题