Async: Usar um AsyncFunction como a função iteratário resulta em iteratário sendo passado como indefinido

Criado em 26 set. 2017  ·  4Comentários  ·  Fonte: caolan/async

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 .

docs question

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, 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

Todos 4 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações