JavaScript Promise.any() — перша УСПІШНА обіцянка
Promise.any() повертає результат першої успішної обіцянки, а невдалі просто ігнорує.
Загальний опис
Різниця з race тут принципова, і на ній легко обпектися. race віддає першу, що завершилась — навіть якщо вона впала. any чекає на першу, що вдалась, і падає лише тоді, коли впали геть усі.
Типове застосування — кілька дзеркал одного ресурсу: беремо те, що відповіло першим, а решта хай собі падає.
Якщо не вдалась жодна, any кидає особливу помилку — AggregateError, у полі errors якої лежать усі причини невдач.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 85 | 79 | 14 | 71 | 85 | — |
| Переглядач | ||||
|---|---|---|---|---|
| 85 | 85 | 79 | 14 |
| Переглядач | ||
|---|---|---|
| 15.0.0 | 1.2 |
Приклади
+ запропонувати свій приклад у пісочниці
// top-level await працює лише в модулях — тут той самий код в async-функції
(async () => {
try {
const data = await Promise.any([
mirror('перше', 300),
mirror('друге', 120),
mirror('третє', 200),
]);
console.log('Перше вдале дзеркало:', data);
} catch (error) {
// не вдалось ЖОДНЕ
console.error(error.errors); // масив усіх причин
}
})();
// — службове: на бойовій сторінці тут був би fetch(адреса).then(r => r.json()),
// у прикладі відповідь віддає заглушка — такий самий проміс —
function mirror(name, delay) {
return new Promise(resolve => {
setTimeout(() => resolve({ dzerkalo: name, zatrymka: delay }), delay);
});
}
Коментарі
Коментарів ще немає — будьте першим!