El siguiente código es un ejemplo simple.
function delay(time) { return new Promise(function (resolve) { setTimeout(resolve, time); }).then((e) => { console.log(`Wait ${time}ms.`); return time; }); } async function main() { let r = await Promise.race([ delay(1000), delay(2000), ]); console.log(r); } await main();Producción:
Wait 1000ms. 1000 Wait 2000ms.Quiero detener el código restante excepto el código que se ejecutó primero a través de Promise.race.
¿Hay alguna otra manera?
La única forma de hacer algo como esto sería poner el código que se ejecuta condicionalmente cerca de donde llamas a la Promesa.
function delay(time) { return new Promise(function (resolve) { setTimeout(resolve, time, time); }) } async function main() { const firstResult = await Promise.race([ delay(1000), delay(2000), ]); console.log(`Wait ${firstResult}ms.`); } main(); Si el código que desea ejecutar condicionalmente está dentro de una función, como con su función de delay original, y la función no proporciona explícitamente una forma de cambiar su ejecución después de ser llamada, entonces no, no hay nada que pueda hacer para mantener ese código de ejecutar.
La mayoría de las veces, cuando se trata de Promises, no existe tal método, aunque hay excepciones, como con AbortController .