Попробуйте сделать что-либо подобное, написав функцию >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);
>});