【问题标题】:Waiting for multiple asynchronous http requests to complete等待多个异步 http 请求完成
【发布时间】:2023-04-23 14:34:01
【问题描述】:

我想在我的 Node.js 应用程序中执行多个 http 请求。我还想等到所有这些都完成后再继续使用结果。 Javascript Promises 是应该这样做的方式,还是有更具体的 Node 可以更好地处理这个问题?

【问题讨论】:

  • Promise.all()Promise.allSettled() 与使用 Promise 的 http 请求库(例如 got())一起使用是首选方法。

标签: javascript node.js multithreading


【解决方案1】:

Promise.all 等待所有的履行(或第一次拒绝)。您可以通过以下链接了解使用 Promise.allSettled() 实现此目的的不同方法。

已被询问:Wait until all promises complete even if some rejected

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled

【讨论】:

  • 目前尚不清楚 Promises.all(或 .allSettled)是在运行真正的异步线程,还是被伪造以使其看起来像这样。 Javascript 是一个单线程环境。 Promises 是否真的使用多个线程来解决这个问题?
  • 阅读一篇很有用的帖子*.com/questions/22844441/…
【解决方案2】:

【讨论】:

  • 你知道多个 Promises (Promises.all) 是实际异步运行,还是同步运行? Javascript 实际上只是一个单线程环境。
  • 它是异步的。如果你不在 .then()、.catch() 或 .finally() 之外写东西,它不会等待请求结束。