【问题标题】:Why does node wait for a single promise, but not an array of promises?为什么节点等待一个承诺,而不是一个承诺数组?
【发布时间】:2016-06-03 03:06:05
【问题描述】:

考虑这个模拟查询数据库并在 2 秒后通过 Promise 返回一些记录的函数:

function query() {
  var recs = [1,2,3];
  return new Promise(r => setTimeout(() => r(recs), 2000))
}

如果我添加以下语句:

query().then(console.log);

并在 with 节点上运行脚本,它会暂停 2 秒,打印出记录,然后按预期返回。

另一方面,如果我将该行替换为完全相同的 promise 数组:

Array(5).map(x => query().then(console.log));

脚本立即返回,不打印任何内容。为什么节点在退出之前等待单个promise返回,但当有5个未解决的promise数组时立即退出?

【问题讨论】:

标签: javascript node.js promise


【解决方案1】:

这是因为Array(5).map(... 永远不会调用传递给map 的函数。原因是 map 跳过了数组中的孔。 Array(5) 返回所谓的稀疏数组,只有空槽,没有实际内容。

有关稀疏数组以及如何将它们转换为密集数组的更多信息,我会推荐 this excellent blog Axel Rauschmayer 的帖子。

【讨论】:

  • 呃,我只是忘了打电话给fill。泰。
  • 你可以使用 Array.from({length : 5}, mapFunction);
  • @JoseHermosillaRodrigo,非常好,不知道。
猜你喜欢
  • 2019-04-29
  • 2019-12-10
  • 2016-02-04
  • 1970-01-01
  • 2021-10-10
  • 2022-01-09
  • 2017-01-03
  • 2015-06-26
  • 1970-01-01
相关资源
最近更新 更多