当前位置: 首页 > 面试题库 >

JavaScript中的Promise.all:如何获得所有承诺的解决价值?

鲁斯伯
2023-03-14
问题内容

我编写了以下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.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]) {

  });


 类似资料:
  • 问题内容: 我保证会绑定到我的UI中。当承诺解决并且UI元素呈现后,我可以单击该UI元素。在我处理点击的控制器代码中,我要根据诺言的价值行事。至此,在我的角度代码中,我已经知道诺言已经解决了..但是当我想要获得价值时,它仍然是诺言。 鉴于我知道必须兑现承诺,获得承诺价值的最佳方法是什么? 问题答案: 承诺永远是诺言- 那就应该如此。尽管可以将诺言直接绑定到视图,但我通常不鼓励这种做法,因为它缺乏透

  • 问题内容: 我正在从Angular的文档中查看此示例,但是我认为这可能总体上适用于Promise。下面的示例是从文档中逐字复制的,并附有评论: 我不清楚这是如何工作的。如果我可以调用第一个的结果并将它们链接起来(据我所知),那么它就是一个类型为Promise的对象。这不是一个。那么,“它的值将是promiseA的结果增加1”的含义是什么? 我应该以这种方式访问吗?成功回调如何返回承诺并返回“结果+

  • 问题内容: 我试图弄清楚如何通过可能与“ co” 一起获得承诺的价值: 调用的函数不是生成器,而是普通函数。有了上面的,但是我想要解析的值。是否合作或其他一些库有这样做的方法吗? 问题答案: 是的, 公司 可以做到。您必须在调用中包装父函数: 内在将成为解决价值。如果承诺被拒绝,则可以通过基本声明来纠正错误。

  • 问题内容: 我想从一组单选按钮中获取选定的值。 这是我的HTML: 这是我的.js: 我一直不确定。 问题答案: var rates = document.getElementById(‘rates’).value; rates元素是,因此它没有值。这可能是来自哪里。 该属性将告诉您是否选择了元素:

  • 问题内容: 以下是用于从共享点检索信息的控制器。我可以看到调试显示条目具有需要在视图中呈现的属性值。我如何从结果承诺中获得那个价值? 我试图将其放入柜台,但没有显示。任何帮助,将不胜感激。 问题答案: 不要使用jQuery ,而要使用$ http服务: 然后从返回的promise中提取数据: $ http服务返回的promise已与AngularJS框架集成。只有在AngularJS执行上下文中应

  • 问题内容: 因此,我遇到了多个未知长度的promise链的情况。我希望在处理所有链条后执行一些操作。那有可能吗?这是一个例子: 在此示例中,我设置了一个承诺1,,2和3,这些承诺会在某个随机时间得到解决。然后,我将诺言添加到第一和第三的结尾。我想在所有链条都解决后解决。这是运行此代码时的输出: 有没有办法等待连锁解决? 问题答案: 当所有链条都解决后,我希望所有人解决。 当然,然后将每个链的承诺传