Qual versão do assíncrono você está usando?
2.5.0
Em qual ambiente o problema ocorreu (versão do nó / versão do navegador)
Versão do sistema operacional: OS X 10.12.6
Versão do nó: 8.4.0
Versão do navegador: N / A
O que você fez?
// templateNames is an array of strings
async.map(templateNames, async (templateName, next) => {
let template;
try {
template = await utils.getFile(templateName);
} catch(err) {
next(err);
}
...
// and so on
O que você esperava que fosse acontecer?
next
é uma função iteratária
Qual foi o resultado real?
next
é undefined
Acabei usando apenas a sintaxe .then().catch()
para cumprir meu objetivo, mas ainda queria compartilhar isso usando uma AsyncFunction
( NOTA: esta não é a async
definição, mas a nativa AsyncFunction
Object ) resulta no iteratário ( next
) sendo do tipo undefined
.
async
funções são tratadas de forma diferente a partir de 2.3.0 - elas não recebem um retorno de chamada. Em vez disso, apenas retorne um valor (ou promessa). Na verdade, em seu exemplo, mesmo try
/ catch
não é necessário porque quaisquer erros lançados serão detectados pelo Async. Isso deve simplificar um pouco o seu código.
// templateNames is an array of strings
async.map(templateNames, async templateName => {
const template = await utils.getFile(templateName);
...
// and so on
AsyncFunction
docs: http://caolan.github.io/async/global.html
🤦♂️ Ler essa parte dos documentos com mais clareza teria sido inteligente. Obrigado.
Para ser justo, essa descrição não é tão óbvia no site do docs ... 🙄 📜
Na verdade, acho que está bem claro. Eu olhei para os documentos inicialmente e perdi essa parte.
Comentários muito úteis
async
funções são tratadas de forma diferente a partir de 2.3.0 - elas não recebem um retorno de chamada. Em vez disso, apenas retorne um valor (ou promessa). Na verdade, em seu exemplo, mesmotry
/catch
não é necessário porque quaisquer erros lançados serão detectados pelo Async. Isso deve simplificar um pouco o seu código.AsyncFunction
docs: http://caolan.github.io/async/global.html