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.
¿Cómo escribo funciones asincrónicas para Node?
Simplemente escriba funciones normales, la única diferencia es que no se ejecutan de inmediato, sino que se transmiten como devoluciones de llamada.
¿Cómo debo implementar el manejo de eventos de error correctamente?
Generalmente, las API le devuelven la llamada con un error como primer argumento. Por ejemplo
database.query('something', function(err, result) {
if (err) handle(err);
doSomething(result);
});
Es un patrón común.
Otro patrón común es on('error')
. Por ejemplo
process.on('uncaughtException', function (err) {
console.log('Caught exception: ' + err);
});
Editar:
var async_function = function(val, callback){
process.nextTick(function(){
callback(val);
});
};
La función anterior cuando se llama como
async_function(42, function(val) {
console.log(val)
});
console.log(43);
Imprimirá 42
en la consola de forma asincrónica. En particular, se process.nextTick
activa después de que la pila de llamadas de eventloop actual esté vacía. Esa pila de llamadas está vacía después async_function
y se console.log(43)
ha ejecutado. Entonces imprimimos 43 seguido de 42.
Probablemente debería leer un poco sobre el ciclo de eventos.
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.