Книга: Выразительный JavaScript
Ожидание нескольких обещаний
Ожидание нескольких обещаний
У конструктора Promise
есть метод all
, который, получая массив обещаний, возвращает обещание, которое ждёт завершения всех указанных в массиве обещаний. Затем он выдаёт успешный результат и возвращает массив с результатами. Если какие-то из обещаний в массиве завершились неудачно, общее обещание также возвращает неудачу (со значением неудавшегося обещания из массива).
Попробуйте сделать что-либо подобное, написав функцию all
.
Заметьте, что после завершения обещания (когда оно либо завершилось успешно, либо с ошибкой), оно не может заново выдать ошибку или успех, и дальнейшие вызовы функции игнорируются. Это может упростить обработку ошибок в вашем обещании.
function all(promises) {
return new Promise(function(success, fail) {
// Ваш код.
});
}
// Проверочный код.
all([]).then(function(array) {
console.log("Это должен быть []:", array);
});
function soon(val) {
return new Promise(function(success) {
setTimeout(function() { success(val); },
Math.random() * 500);
});
}
all([soon(1), soon(2), soon(3)]).then(function(array) {
console.log("Это должен быть [1, 2, 3]:", array);
});
function fail() {
return new Promise(function(success, fail) {
fail(new Error("бабах"));
});
}
all([soon(1), fail(), soon(3)]).then(function(array) {
console.log("Сюда мы попасть не должны ");
}, function(error) {
if (error.message != "бабах")
console.log("Неожиданный облом:", error);
});
- Одновременный запуск нескольких копий сервера (multi-instancing)
- 3.5 Проблемы доступа при использовании нескольких протоколов
- Я работаю на компьютере не один. Как настроить Windows для нескольких пользователей?
- Построение диаграммы на основе данных нескольких рабочих листов
- Ожидание процесса
- Глава пятая. Затянувшееся ожидание
- Листинг 5.4. (sem_pv.c) Ожидание и установка двоичного семафора
- 13.2.7. Ожидание события
- 1.6.2. Приемы выделения нескольких объектов
- Сборки, существующие в нескольких версиях
- 10.5.1. Запуск и ожидание с помощью system()
- Пример: копирование нескольких файлов на стандартное устройство вывода