使用 Promise.race(),失去承诺会发生什么?

问题描述 投票:0回答:1

Promise.race(promise1, promise2, ...)
返回一个包含列表中“最快”承诺的解析/拒绝结果的承诺。

其他承诺(即那些“输掉”比赛的承诺)会怎样?

使用 Node.js 进行测试似乎表明它们继续运行。

这似乎与我所知道的没有办法“杀死”承诺的事实相符。

这是正确的吗?

javascript promise
1个回答
10
投票

race
中的所有承诺即使在第一个冲过终点线后也将继续运行 -

const sleep = ms =>
  new Promise(r => setTimeout(r, ms))

async function runner (name) {
  const start = Date.now()
  console.log(`${name} starts the race`)
  await sleep(Math.random() * 5000)
  console.log(`${name} finishes the race`)
  return { name, delta: Date.now() - start }
}

const runners =
  [ runner("Alice"), runner("Bob"), runner("Claire") ]

Promise.race(runners)
  .then(({ name }) => console.log(`!!!${name} wins the race!!!`))
  .catch(console.error)
  
Promise.all(runners)
  .then(JSON.stringify)
  .then(console.log, console.error)

Alice starts the race
Bob starts the race
Claire starts the race
Claire finishes the race
!!!Claire wins the race!!!
Alice finishes the race
Bob finishes the race
[ 
  {"name":"Alice","delta":2158},
  {"name":"Bob","delta":4156},
  {"name":"Claire","delta":1255}
]
© www.soinside.com 2019 - 2024. All rights reserved.