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