В этой части вы прочитаете про дополнительные методы в классе Promise, которые вам могут пригодиться для работы с промессами.
JavaScript Promise API:
Всего мы поговорим о трёх статичных методах которые могут пригодится, но в основном они все будут для того, чтобы параллельно работать с несколькими Promise.
Promise.all:
Этот метод нужен для запуска работы нескольких примесей, это иногда может быть очень полезно, когда вам нужно выполнять несколько задач параллельно.
1 2 3 4 5 6 | Promise.all([ new Promise(resolve => setTimeout(() => resolve(1), 3000)), // 1 new Promise(resolve => setTimeout(() => resolve(2), 2000)), // 2 new Promise(resolve => setTimeout(() => resolve(3), 1000)) // 3 ]).then(alert); // когда все промисы выполнятся, результат будет 1,2,3 // каждый промис даёт элемент массива |
Как видите мы тут запустили три промиса, и они проработать абсолютно параллельно.
Promise.allSettled:
Этот промис похож на предыдущий, но разница в том, что если в прошлом примере будет хоть одна ошибка в одном из промисов, то тогда всё выдаст ошибку, этот же не так работает, он выдаст ошибку только там, где она произошла, а остальные продолжат работать.
Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | const promise1 = new Promise((resolve,reject) => { reject("Непредвиденная ошибка"); setTimeout(resolve, 500, "Hello"); }); const promise2 = new Promise((resolve,reject) => { setTimeout(resolve, 1000, "World"); }); Promise.allSettled([promise1, promise2]) .then(values => { const [promise1data, promise2data] = values; console.log(promise1data); // {status: "rejected", reason: "Непредвиденная ошибка"} console.log(promise2data); // {status: "fulfilled", value: "World"} }); |
Как видите тут ошибка только в первом промисе, но не смотря на это то что в then()
, всё равно выполниться.
Promise.race:
Этот тоже похож на предыдущие, но теперь он будет выводить результат первого промиса, который закончил работать, но не зависемо закончил он это делать успешно или с ошибкой.
Вот пример работы:
1 2 3 4 5 6 7 8 9 | const promise1 = new Promise((resolve) => { setTimeout(resolve, 500, "Hello"); }); const promise2 = new Promise((resolve) => { setTimeout(resolve, 1000, "World"); }); Promise.race([promise1, promise2]) .then(value => console.log(value)) // Hello .catch(error => console.log(error)); |
В нашем случае выводиться слово «Hello», то есть результат первого промиса.
Также есть точно такой же метод, но Promise.any(), но он уже выведет первый промис, но который закончил свою работу успешно.
Вывод:
В этой не большой части мы рассмотрели дополнительные методы для класса Promise, для работы с промисами, как видите в основном они на целены на параллельную работу их.