J'ai trois fonctions asynchrones qui retournent un objet. Si l'une des fonctions échoue, elles renvoient un objet vide. Le problème est que si j'essaie de Promise.race ces fonctions, l'une des fonctions non réussies peut terminer en premier et avoir un retour d'objet vide. Mon code Promise ressemble à ceci:

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

Est-il possible d'arrêter l'exécution d'une des fonctions get_info asynchrones sans arrêter Promise.race? Ou pourrais-je dire en quelque sorte à Promise.race d'attendre que l'objet renvoyé contienne des informations?

1
Asgeir Bjelland 3 nov. 2019 à 15:25

1 réponse

Vous pouvez faire que le Promise rejeté ne soit jamais terminé

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)
  })()
}
1
apple apple 3 nov. 2019 à 12:38