Por que .catch () não captura rejeitar () no construtor Promise dentro do loop em uma função assíncrona, a menos que Erro seja passado?
Dado
(async () => {
const p = await new Promise((resolve, reject) => setTimeout(() => {
reject(new Error(1))
}, Math.floor(Math.random() * 1000))); return p})()
.then(data => console.log(data))
.catch(err => console.error(err));
aError()
está logado em.catch()
Se estendermos o padrão para usar um loop, oError
está logado em.catch()
const fn = async(res, ...props) => {
for (let prop of props) res.push(await prop())
return res
}
const arr = [
() =>
new Promise((resolve, reject) =>
setTimeout(() =>
reject(new Error(1))
, Math.floor(Math.random() * 1000))
),
() =>
new Promise((resolve, reject) =>
setTimeout(() =>
resolve(1)
, Math.floor(Math.random() * 1000))
)
];
fn([], ...arr)
.then(data => console.log(data))
.catch(err => console.log(err));
Se usarmos um loop para chamar mais de uma função que retorna umPromise
e não passa explicitamenteError()
parareject()
doPromise
construtorresolver
função.catch()
não pega o erro e o arrayres
não é retornado, apenas oPromise
valor passado pararesolve()
está disponível em
const fn = async(res, ...props) => {
for (let prop of props) res.push(await prop())
return res
}
const arr = [
() =>
new Promise((resolve, reject) =>
setTimeout(() =>
reject(1)
, Math.floor(Math.random() * 1000))
),
() =>
new Promise((resolve, reject) =>
setTimeout(() =>
resolve(1)
, Math.floor(Math.random() * 1000))
)
];
fn([], ...arr)
// what happened to our array `res` returned from `fn`?
.then(data => console.log(data))
// what happened to our rejected Promise?
.catch(err => console.log(err));
Questões:
Porquereject()
a chamada não se propaga para.catch()
quandoError()
não é explicitamente passado parareject()
dentroPromise
construtor dentro de um loop em umasync
função?
Por que apenas um únicoPromise
valor retornado para.then()
embora uma matriz seja retornada doasync
funcionar quando um dosPromise
objetos iterados em um loopreject()
função é chamada dentroPromise
construtorresolver
função?