await q.push(task)
não é seguro para uso no momento porque a promessa retornada por q.push
nunca resolve nem rejeita se o operador de fila lançar um erro. Eu entendo que await q.push(task)
não pode lançar um erro por causa da compatibilidade com versões anteriores desse método e seu parâmetro de retorno de chamada opcional (o recurso push and forget). Um método q.asyncPush(task)
que rejeita sua promessa não deveria ser viável?
Você pode mostrar o problema com este código (no nó ou navegador sem a necessidade):
const async = require('async');
let pushResult;
(async () => {
const q = async.queue(async (task) => {
throw new Error('Bad thing');
});
try {
pushResult = q.push({some: 'data'});
await pushResult;
console.log('Error not catched');
} catch (e) {
console.log('Error catched');
}
})();
setTimeout(() => {
console.log('exit');
console.log(pushResult);
}, 1000);
_Originalmente postado por @darksabrefr em https://github.com/caolan/async/pull/1641#issuecomment -498191809_
Estou pensando em fazer q.push()
resolver com o objeto de erro. Isso seria suficiente? Eu realmente não quero dar unhandledRejection
s para a grande maioria dos queue
usuários.
Resolver com um erro pode ser uma opção, mas você precisará testar o retorno de q.push
, não é realmente um padrão convencional de promessa (não try
/ catch
/ finally
block ou .then()
/ .catch()
métodos podem ser usados com). Rejeições diretas não são uma opção, concordo com isso, é uma modificação importante. Para mim, existem 2 outras possibilidades:
q.asyncPush
distinto que retorna uma promessa que pode ser rejeitada. Talvez a maneira mais fácil e clara, porque as APIs de promessa e retorno de chamada podem ser totalmente separadas.q.push
para ativar promessas rejeitadas.O que é realmente importante é que as promessas não ficarão para sempre pendentes, então você pode selecionar a melhor opção que achar ;-)
Gosto da ideia asyncPush
.
Muito obrigado !
@aearly isso já foi implementado?
Era, consulte https://caolan.github.io/async/v3/docs.html#QueueObject : pushAsync
Comentários muito úteis
Gosto da ideia
asyncPush
.