Eu tentei pesquisar sobre como exatamente as funções assíncronas devem ser escritas. Após vasculhar bastante documentação, ainda não está claro para mim.
Como escrevo funções assíncronas para o Node? Como devo implementar o tratamento de eventos de erro corretamente?
Outra maneira de fazer minha pergunta seria esta: Como devo interpretar a seguinte função?
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
Além disso, achei interessante esta questão no SO ("Como faço para criar uma função assíncrona sem bloqueio em node.js?"). Acho que ainda não foi respondido.
javascript
asynchronous
node.js
Kriem
fonte
fonte
setTimeout
esetInterval
no seu navegador favorito e brincar com eles também. Ou callbacks ajax (provavelmente o mais próximo da experiência do nó), ou ouvintes de eventos para coisas com as quais você está familiarizado, como eventos de clique e carregamento. O modelo assíncrono já existe no navegador e eles são exatamente os mesmos no nó.Respostas:
Você parece estar confundindo IO assíncrona com funções assíncronas. node.js usa IO sem bloqueio assíncrono porque IO sem bloqueio é melhor. A melhor maneira de entender isso é assistir a alguns vídeos de ryan dahl.
Basta escrever funções normais, a única diferença é que elas não são executadas imediatamente, mas transmitidas como retornos de chamada.
Geralmente APIs fornecem um retorno de chamada com um erro como o primeiro argumento. Por exemplo
É um padrão comum.
Outro padrão comum é
on('error')
. Por exemploEditar:
A função acima quando chamada como
Será impresso
42
no console de forma assíncrona. Em particular,process.nextTick
dispara depois que a pilha de chamadas do eventloop atual está vazia. Essa pilha de chamadas está vazio depoisasync_function
econsole.log(43)
ter executado. Então, imprimimos 43 seguido de 42.Você provavelmente deve fazer alguma leitura sobre o loop de eventos.
fonte
Apenas passar por callbacks não é suficiente. Você tem que usar settimer, por exemplo, para tornar a função assíncrona.
Exemplos: funções não assíncronas:
Se você executar o exemplo acima, isso deve ser bom, terá que esperar até que essas funções terminem de funcionar.
Funções pseudo multithread (assíncronas):
Este será verdadeiramente assíncrono. Isso deve ser bom e será escrito antes de terminar o assíncrono.
fonte
Você deve assistir a este: Node Tuts episódio 19 - Padrões de Iteração Assíncrona
Deve responder às suas perguntas.
fonte
Se você SABE que uma função retorna uma promessa, sugiro usar os novos recursos async / await em JavaScript. Faz com que a sintaxe pareça síncrona, mas funcione de forma assíncrona. Quando você adiciona a
async
palavra-chave a uma função, isso permite que você façaawait
promessas nesse escopo:se uma função não retornar uma promessa, recomendo envolvê-la em uma nova promessa definida por você e, em seguida, resolva os dados que deseja:
Resultado: aproveite o poder das Promessas.
fonte
Tente fazer isso, funciona tanto para o nó quanto para o navegador.
fonte
Estou lidando com muitas horas para essa tarefa em node.js. Eu sou principalmente o cara do front-end.
Acho isso muito importante, porque todos os métodos de nó assíncronos lidam com callback, e transformá-lo em Promise é melhor lidar com isso.
Eu só quero mostrar um resultado possível, mais enxuto e legível. Usando ECMA-6 com assíncrono, você pode escrever assim.
o
(undefined || null)
é para repl cenários (Leia evento de loop de impressão), usando o trabalho indefinido também.fonte