24-06-24 12:27:34
Каждый из этих методов служит уникальной цели в управлении асинхронным кодом.
Promise.resolve(value) возвращает промис, который разрешается с указанным значением. Это полезно для преобразования значений или объектов в промис.
const resolvedPromise = Promise.resolve(42);
resolvedPromise.then(value => {
console.log(value); // Вывод: 42
});
Promise.reject(reason) возвращает промис, который отклоняется с указанной причиной. Это полезно для создания промисов, которые немедленно завершаются с ошибкой.
const rejectedPromise = Promise.reject('Произошла ошибка');
rejectedPromise.catch(error => {
console.log(error); // Вывод: Произошла ошибка
});
Promise.all(iterable) принимает итерируемый объект промисов и возвращает единый промис, который разрешается, когда все промисы в итерируемом объекте разрешены, или отклоняется, когда любой из промисов отклоняется. Этот метод полезен для выполнения нескольких асинхронных операций параллельно и ожидания их завершения.
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then(values => {
console.log(values); // Вывод: [3, 42, "foo"]
});
Promise.race(iterable) принимает итерируемый объект промисов и возвращает единый промис, который разрешается или отклоняется, как только один из промисов в итерируемом объекте разрешается или отклоняется. Это полезно в сценариях, когда вас интересует первый завершившийся промис.
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, 'one');
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then(value => {
console.log(value); // Вывод: "two"
});
Promise.allSettled(iterable) принимает итерируемый объект промисов и возвращает единый промис, который разрешается после того, как все промисы в итерируемом объекте завершены (разрешены или отклонены). Это полезно, когда вам нужно знать результат всех промисов, независимо от того, разрешены они или отклонены.
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => {
setTimeout(reject, 100, 'error');
});
Promise.allSettled([promise1, promise2]).then(results => {
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log('Разрешено:', result.value);
} else {
console.log('Отклонено:', result.reason);
}
});
});
// Вывод:
// Разрешено: 3
// Отклонено: error
Promise.any(iterable) принимает итерируемый объект промисов и возвращает единый промис, который разрешается, как только любой из промисов в итерируемом объекте разрешается, с значением разрешенного промиса. Если ни один промис в итерируемом объекте не разрешается, он отклоняется с AggregateError. Этот метод полезен, когда вам нужен первый успешный промис.
const promise1 = new Promise((resolve, reject) => {
setTimeout(reject, 100, 'error');
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 200, 'success');
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 300, 'another success');
});
Promise.any([promise1, promise2, promise3]).then(value => {
console.log(value); // Вывод: "success"
}).catch(error => {
console.log(error.errors); // В случае, если все промисы отклонены
});