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
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?
async
/ await
, menos com retornos de chamadafoo
/ bar
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()])
)
);
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.