【问题标题】:Make Promise.race finish only when one is successful让 Promise.race 仅在成功时完成
【发布时间】:2020-02-28 23:38:27
【问题描述】:

我有三个返回对象的异步函数。如果其中一个函数不成功,它们将返回一个空对象。问题是,如果我尝试 Promise.race 这些函数,其中一个不成功的函数可能会先完成并返回一个空对象。我的 Promise 代码如下所示:

let product = await Promise.race([
        get_info_1(code),
        get_info_2(code),
        get_info_3(code)
    ])

是否可以在不停止 Promise.race 的情况下停止其中一个异步 get_info 函数的运行?或者我可以以某种方式告诉 Promise.race 等到返回的对象包含一些信息?

【问题讨论】:

标签: javascript asynchronous


【解决方案1】:

你可以让被拒绝的Promise永远不完整

const never_resolve = new Promise(() => {}) 
{
  (async function() {
    let product = await Promise.race([
      Promise.reject(1).catch(_ => never_resolve),
      Promise.resolve(2).catch(_ => never_resolve),
      Promise.reject(3).catch(_ => never_resolve)
    ])
    console.log(product)
  })()
}

【讨论】:

    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多