Async: A documentação precisa de melhores exemplos

Criado em 14 jan. 2019  ·  21Comentários  ·  Fonte: caolan/async

Considere este exemplo para mapa

async.map(['file1','file2','file3'], fs.stat, function(err, results) {
    // results is now an array of stats for each file
});

Basicamente, isso não me diz nada, exceto sintaxe. Na maioria dos casos, as pessoas não vão passar fs.stat . Os exemplos devem incluir o uso de todas as opções possíveis. Todos os exemplos de todas as funções e métodos precisam ser atualizados. Eles são muito simplistas

docs help wanted

Comentários muito úteis

Eu concordo, precisamos de documentos muito melhores. Também gostaria de alterar muitos dos exemplos (ou adicionar mais exemplos) para usar async / await. No entanto, isso é algo que leva tempo que não tenho no momento.

Todos 21 comentários

Eu concordo, precisamos de documentos muito melhores. Também gostaria de alterar muitos dos exemplos (ou adicionar mais exemplos) para usar async / await. No entanto, isso é algo que leva tempo que não tenho no momento.

Talvez eu possa ajudar.

Como posso ajudar com exemplos?

  • Exemplos com mais async / await , menos com retornos de chamada
  • Exemplos mais concretos de aplicativos do mundo real, menos foo / bar
  • Coisas que mostram o "ponto ideal" do Async - coisas que são difíceis de fazer sem a biblioteca
  • Os exemplos são acessíveis para recém-chegados ao Node / JS que mostram como os parâmetros fluem através
  • Exemplos mais abrangentes que mostram mais recursos de métodos individuais

Existem @example blocos nos comentários JSDoc para a maioria dos métodos. Enlouquecer!

observação para esse exemplo específico, você poderia fazer

await async.map(['file1','file2','file3'], fs.promises.stat);
// or without async lib
await Promise.all(['file1','file2','file3'].map(name => fs.promises.stat(name))

ou se você quiser um objeto como resultado

await async.auto({
  file1: async()=>fs.promises.stat('file1'),
  file2: async()=>fs.promises.stat('file2')
  file3: async()=>fs.promises.stat('file3')
})
// or without async lib
Object.fromEntries(
  await Promise.all(['file1','file2','file3'].map(async name => [name, await fs.promises.stat(name)]))
)

Em particular, estou procurando um exemplo (simples) baseado em Promise de async.mapLimit, mesmo sem async / await. Não encontrei nenhum exemplo sem retorno de chamada até agora.

@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js , se você não quiser await , você pode substituí-lo por uma função recursiva

Olá Cyril @caub ,
Obrigado pela sua resposta. Não sou particularmente contra 'await', em vez de 'bons exemplos' para o módulo 'async' com o qual gostaria de começar e ver uma implementação com manipulação Promise básica, incluindo .catch.
Sinceramente, tenho dificuldade em usar async com o Promises em geral, então, antes de usar async / await, gostaria de começar com a etapa 1) ...
A propósito, obrigado por compartilhar seu exemplo, não tenho certeza de como ele se relaciona com o módulo assíncrono.

Eu pensei que por "exemplo simples baseado em promessa", você quis dizer um exemplo sem qualquer biblioteca

se você quiser um exemplo com esta biblioteca, tenho certeza que há muitos

Certo, em geral estou bem com o uso de Promises, e também entendo como usar os módulos 'assíncronos' no estilo de retorno de chamada. Conforme afirma a documentação, sem retornos de chamada fornecidos, ele retornaria uma promessa. Até agora, não consegui bons exemplos, pelo menos não para async.map (Limit). Como este tópico é sobre 'melhores exemplos' na documentação, eu entrei nisso aqui ...
E como disse, eu realmente não consegui colocar uma promessa em funcionamento também, até mesmo levantei um problema sobre isso.

Olá, @caub ,

@romanbalayan legal

os métodos que mais usamos são async.parallel e async.auto , você planeja cobri-los também?

nota: acho que você poderia evitar o IIFE assíncrono (async ()=>{ em exemplos assíncronos / aguardar, para tornar as coisas mais leves

@caub , solicitação pull atualizada para remover IIFE. (Estava usando para testar localmente se as amostras estavam realmente funcionando)

Sim, eu também gostaria de abordar o controle de fluxo em breve. Na verdade, estava apenas esperando um feedback se as alterações que fiz nos exemplos da coleção correspondem às expectativas aqui.

@romanbalayan o que você poderia fazer é configurar esse ramo de RP como página do github (vá em seu fork do assíncrono, configurações> Páginas do Github> Fonte: (escolha seu ramo de RP)) para que possamos visualizá-lo em http: //romanbalayan.github .io / async / v3 /

@caub , ótima ideia. Fiz isso e deve estar disponível agora em https://romanbalayan.github.io/async/v3/

Olá @caub ,

Adicionadas amostras de promessa e assíncrona / espera para métodos de controle de fluxo - async.parallel , async.series e async.auto

@romanbalayan legal! https://romanbalayan.github.io/async/v3/docs.html#auto

Eu sinto que os exemplos de callback e promessas são sempre bem parecidos, provavelmente vale a pena ter apenas um deles, já que de qualquer forma, ao usar promessas, preferimos ir para async / await, e isso tornaria as coisas mais leves

Coisas boas outras!

@caub

Devo também remover o exemplo de uso de Promises nos métodos de coleções também?

Eu acho que sim você poderia

Além disso, para os métodos de controle de fluxo, você pode adicionar exemplos com funções internas assíncronas, por exemplo:

const delay = (t, v) => new Promise(r => setTimeout(r, t, v));

try {
    console.time('parallel')
    const results = await async.parallel({
        one: async () => delay(200, 1),
        two: async () => delay(100, 2),
    });
    console.timeLog('parallel', results);
    // parallel: 200ms { one: 1, two: 2 }
}
catch (err) {
    console.log(err);
}

@romanbalayan ótimo trabalho. Gostaria de ter encontrado sua versão da documentação há alguns dias! Afinal, descobri como as coisas funcionam por tentativa e erro, mas teria sido menos doloroso com os novos exemplos :-)
Ainda não estou 100% certo sobre a utilidade de alguns dos métodos assíncronos, agora que temos async / await e Promise.all, bem como Promise.allSettled .. Basicamente, estou me perguntando se há equivalentes nativos de todos os métodos neste momento . (?)

const results = await async.parallel({
    one: async () => delay(200, 1),
    two: async () => delay(100, 2),
});

seria escrito nativamente:

const results = Object.fromEntries(
  await Promise.all(
    Object.entries({
      one: async () => delay(200, 1),
      two: async () => delay(100, 2),
    })
      .map(async ([k, v]) => [k, await v()])
  )
);
Esta página foi útil?
0 / 5 - 0 avaliações