Intenté investigar cómo se deben escribir exactamente las funciones asincrónicas. Después de revisar mucha documentación, todavía no me queda claro.
¿Cómo escribo funciones asincrónicas para Node? ¿Cómo debo implementar correctamente el manejo de eventos de error?
Otra forma de hacer mi pregunta sería la siguiente: ¿Cómo debo interpretar la siguiente función?
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
Además, encontré esta pregunta en SO ("¿Cómo creo una función asincrónica sin bloqueo en node.js?") Interesante. No siento que haya sido respondida todavía.
javascript
asynchronous
node.js
Kriem
fuente
fuente
setTimeout
ysetInterval
en tu navegador favorito y juegues con ellos también. O devoluciones de llamada ajax (probablemente lo más parecido a la experiencia del nodo), o detectores de eventos para cosas con las que está familiarizado, como hacer clic y cargar eventos. El modelo asincrónico ya existe en el navegador y son exactamente iguales en el nodo.Respuestas:
Parece que confunde la E / S asíncrona con las funciones asíncronas. node.js usa E / S sin bloqueo asincrónico porque es mejor el E / S sin bloqueo. La mejor manera de entenderlo es ir a ver algunos videos de ryan dahl.
Simplemente escriba funciones normales, la única diferencia es que no se ejecutan de inmediato, sino que se transmiten como devoluciones de llamada.
Generalmente, las API le devuelven la llamada con un error como primer argumento. Por ejemplo
Es un patrón común.
Otro patrón común es
on('error')
. Por ejemploEditar:
La función anterior cuando se llama como
Imprimirá
42
en la consola de forma asincrónica. En particular, seprocess.nextTick
activa después de que la pila de llamadas de eventloop actual esté vacía. Esa pila de llamadas está vacía despuésasync_function
y seconsole.log(43)
ha ejecutado. Entonces imprimimos 43 seguido de 42.Probablemente debería leer un poco sobre el ciclo de eventos.
fuente
Simplemente pasar por las devoluciones de llamada no es suficiente. Tienes que usar settimer, por ejemplo, para que la función sea asincrónica.
Ejemplos: funciones no asincrónicas:
Si va a ejecutar el ejemplo anterior, esto debería ser bueno, tendrá que esperar hasta que esas funciones terminen de funcionar.
Funciones de pseudo multiproceso (asíncrono):
Este será realmente asincrónico. Esto debería estar bien escrito antes de que finalice el async.
fuente
Deberías ver esto: Node Tuts episodio 19 - Patrones de iteración asincrónica
Debería responder a sus preguntas.
fuente
Si SABE que una función devuelve una promesa, le sugiero que utilice las nuevas funciones async / await en JavaScript. Hace que la sintaxis parezca sincrónica pero que funcione de forma asincrónica. Cuando agrega la
async
palabra clave a una función, le permite hacerawait
promesas en ese ámbito:si una función no devuelve una promesa, recomiendo envolverla en una nueva promesa que defina, luego resuelva los datos que desee:
En pocas palabras: aproveche el poder de las promesas.
fuente
Prueba esto, funciona tanto para el nodo como para el navegador.
fuente
He negociado demasiadas horas para tal tarea en node.js. Soy principalmente un chico de front-end.
Encuentro esto bastante importante, porque todos los métodos de nodo asíncronos tratan con la devolución de llamada, y transformarlo en Promise es mejor manejarlo.
Solo quiero mostrar un resultado posible, más sencillo y legible. Usando ECMA-6 con async puedes escribirlo así.
el
(undefined || null)
es para escenarios de respuesta (bucle de impresión de evento de lectura), el uso de undefined también funciona.fuente