Методы промисов Javascript с примером Polyfill: шпаргалка для разработчиков
15 ноября 2022 г.Promise помогает делать что-то асинхронно. Это способ обработки асинхронных операций в JavaScript.
Обещание состоит из трех состояний:
- Ожидание: исходное состояние, ни выполнено, ни отклонено.
- Выполнено: обещание выполнено (успех)
- Отклонено: невыполненное обещание (сбой)
Не теряя времени, давайте узнаем о функциях Promise.
Примечание: я также добавил пример Polyfill, который поможет вам легко понять, а также поможет вам, если вы готовитесь к интервью.
1. Обещание.все
Promise.all принимает на вход массив обещаний и возвращает объект обещания. Возвращенное обещание будет разрешено, когда будут разрешены все обещания во входном массиве. Если какое-либо обещание во входном массиве отклонено, возвращенное обещание будет отклонено с указанием причины отклонения первого обещания.
Пример:
const promises = [1, 2, 3].map((item) => Promise.resolve(item));
Promise.all(promises).then(console.log); // [1, 2, 3]
Пример полифилла:
const all = (promises) => {
return new Promise((resolve, reject) => {
const result = [];
let count = 0;
for (let i = 0; i < promises.length; i++) {
Promise.resolve(promises[i]).then((res) => {
result[i] = res;
count++;
if (count === promises.length) {
resolve(result);
}
}, reject);
}
});
};
2. Обещание.гонка
Он принимает массив обещаний в качестве входных данных и возвращает объект обещания. Возвращенное обещание будет разрешено/отклонено, как только будет разрешено/отклонено одно из обещаний во входном массиве.
Пример:
const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
Promise.race(promises).then(console.log); // 1
Пример полифилла:
const race = (promises) => {
return new Promise((resolve, reject) => {
promises.forEach((promise) =>
Promise.resolve(promise).then(resolve, reject)
);
});
};
const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
race(promises).then(console.log); // 1
3. Обещание.все выполнено
Он принимает массив обещаний в качестве входных данных и возвращает объект обещания. Возвращенное обещание будет разрешено, когда будут выполнены все обещания во входном массиве. Возвращенное обещание будет разрешено с помощью массива объектов, каждый из которых описывает результат каждого обещания во входном массиве.
Пример:
const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
Promise.allSettled(promises).then(console.log); // [{status: "fulfilled", value: 1}, {status: "rejected", reason: 2}, {status: "fulfilled", value: 3}]
Пример полифилла:
const allSettled = (promises) => {
return new Promise((resolve) => {
const result = [];
let count = 0;
const handleResult = (value, index, status) => {
result[index] = { status, value };
count++;
if (count === promises.length) {
resolve(result);
}
};
for (let i = 0; i < promises.length; i++) {
Promise.resolve(promises[i]).then(
(res) => handleResult(res, i, "fulfilled"),
(err) => handleResult(err, i, "rejected")
);
}
});
};
const promises = [Promise.resolve(1), Promise.reject(2), Promise.resolve(3)];
allSettled(promises).then(console.log); // [{status: "fulfilled", value: 1}, {status: "rejected", reason: 2}, {status: "fulfilled", value: 3}]
4. Обещание.любое
Он принимает массив обещаний в качестве входных данных и возвращает объект обещания. Возвращенное обещание будет разрешено, когда будет разрешено любое из обещаний во входном массиве. Если все обещания во входном массиве отклонены, возвращенное обещание будет отклонено с массивом ошибок.
Пример:
const promises = [Promise.reject(1), Promise.reject(2), Promise.resolve(3)];
Promise.any(promises).then(console.log); // 3
Пример полифилла:
const any = (promises) => {
return new Promise((resolve, reject) => {
const result = [];
let count = 0;
const handleResult = (value, index, status) => {
result[index] = { status, value };
count++;
if (count === promises.length) reject(result);
};
for (let i = 0; i < promises.length; i++) {
promises[i].then(resolve, (err) => handleResult(err, i, "rejected"));
}
});
};
const promises = [Promise.reject(1), Promise.reject(2), Promise.resolve(3)];
any(promises).then(console.log); // 3
5. Обещание.разрешение
Возвращает выполненное обещание.
Пример:
Promise.resolve(1).then(console.log); // 1
Пример полифилла:
const resolve = (value) => {
return new Promise((resolve) => resolve(value));
};
resolve(1).then(console.log); // 1
6. Обещание.отклонить
Он возвращает отклоненное обещание.
Пример:
Promise.reject(1).catch((err) => console.log(err)); // 1
Пример полифилла:
const reject = (value) => new Promise((resolve, reject) => reject(value));
reject(1).catch((err) => console.log(err)); // 1
Спасибо, что прочитали 😊
Есть вопросы или дополнения? пожалуйста, оставьте комментарий.
Оригинал