Cтатические методы класса Promise Flashcards
Cтатические методы класса Promise
С помощью конструктора мы создавали new Promise, также есть статистические методы классов.
У самого класса могут быть методы.
Фабрики, когда хотим создавать чего-либо объект, но не используем напрямую конструктор, а используем фабричные функции.
Теперь разберем статические методы класса Promise и начнем с методы all(). Утилиты методы
- Метод all() принимает массив промисов и возвращает новый промис. Новый промис завершится, когда завершится весь переданный список промисов, и его результатом будет массив их результатов, причем порядок элементов массива в точности соответствует порядку исходных промисов. Если любой из промисов завершится с ошибкой, то промис, возвращённый Promise.all, немедленно завершается с этой ошибкой.
const bigPromise = Promise.all([
fetch(‘https://google.com/?query=js’),
fetch(‘https://yahoo.com/?query=js’),
fetch(‘https://bing.com/?query=js’),
])
bigPromise
.then(data => {
console.log(data)
})
.catch(err => {
console.log(‘CATCH ERROR’, err.message)
})
или
const bigPromise = await Promise.all([
fetch(‘https://google.com/?query=js’),
fetch(‘https://yahoo.com/?query=js’),
fetch(‘https://bing.com/?query=js’),
]) используя конструкцию try / catch, не забывая прописывать ошибки.
Пример:
const run = async () => {
try {
const yahooData = fetch(‘https://yahoo.com/?query=js’)
console.log(yahooData)
const bingData = fetch(‘https://bing.com/?query=js’)
console.log(bingData)
const googleData = fetch(‘https://google.com/?query=js’)
console.log(googleData)
const results = await.Promise.all([yahoData, bingData, googleData])
console.log(results.map((r) => r.url))
} catch (error) {
console.log(error)
}
}
run()
- Метод race() ждёт только первый выполненный промис, из которого берёт результат (или ошибку), после этого все остальные промисы игнорируются.
const bigPromise = Promise.race([
fetch(‘https://google.com/?query=js’),
fetch(‘https://yahoo.com/?query=js’),
fetch(‘https://bing.com/?query=js’),
])
bigPromise
.then(data => {
console.log(data.url)
})
.catch(err => {
console.log(err)
})
- Метод any() очень похож на Promise.race, но ждёт только первый успешно выполненный промис, из которого берёт результат. Если ни один из переданных промисов не завершится успешно, тогда возвращённый объект Promise будет отклонён с помощью AggregateError – специального объекта ошибок, который хранит все ошибки промисов в своём свойстве errors.
const bigPromise = Promise.any([
fetch(‘https://google.com/?query=js’),
fetch(‘https://yahoo.com/?query=js’),
fetch(‘https://bing.com/?query=js’),
])
bigPromise
.then(data => {
console.log(data.url)
})
.catch(err => {
console.log(err)
})
- Метод allSettled() не похож на все остальные методы, которые мы рассмотрели выше тем, что промис, который возвращает даный метод никогда не зареджектится, а соответственно никогда не отработает catch(). У данного метода всегда будет отрабатывать метод .then() с таким массивом элементов:
{status:”fulfilled”, value:результат} для успешных завершений,
{status:”rejected”, reason:ошибка} для ошибок
const bigPromise = Promise.allSettled([
fetch(‘https://googlesdf.com/?query=js’),
fetch(‘https://yahoodsf.com/?query=js’),
fetch(‘https://bingsad.com/?query=js’),
])
bigPromise.then(data => {
console.log(‘then’, data)
})
Фабрики методы:
const pr = Promise.resolve({}) - сразу получим зарезолвенный промис
const pr = Promise.reject({}) - сразу получим зареджектонный промис