Los conceptos que menciona (controlados por eventos, no bloqueantes, asincrónicos, devoluciones de llamada) no son específicos de JavaScript y es valioso comprenderlos en un contexto más general. Todos giran en torno al manejo elegante de recursos sobre los cuales no tenemos control.
Imagínese la espera de datos de una conexión TCP, a la espera de que el sistema operativo elimine un archivo o de que el usuario haga clic en un botón. Si programó esto paso a paso (paso a paso es síncrono), navegaría por la ruta - "haga el paso 1", "haga el paso 2", "haga el paso 3" - hasta que dale al paso "espera a que pase algo". En ese punto, su programa se detendría y se rehusaría a moverse hasta que recibiera los datos, recibió la confirmación de eliminación o recibió el clic del botón. En otras palabras, la llamada bloquea el programa del procedimiento. Esto es bastante ineficiente considerando que probablemente haya otras conexiones TCP, operaciones de archivos y acciones de UI que necesiten nuestra atención y no dependan del elemento que estamos esperando.
En muchos casos, sería mejor indicar que estamos interesados en un recurso y recibir notificaciones fuera de las instrucciones paso a paso cuando el recurso cambie. De su lista de conceptos:
- Events son los cambios en los recursos que nos interesan - nuestra conexión TCP recibieron algunos datos, la eliminación de archivos se ha completado, o un usuario hace clic en un botón.
- Asynchronous llamadas le dicen al sistema operativo o tiempo de ejecución que estamos interesados en hacer algo con un recurso. Son sin bloqueo - nuestro programa puede funcionar en otra cosa mientras espera un cambio en el recurso.
- Callbacks son funciones que se ejecutarán cuando el recurso cambie. Una llamada de recurso asíncrono a menudo acepta una o más referencias a funciones de devolución de llamada (una para el éxito, una para un error, etc.). Cuando el recurso cambia, el tiempo de ejecución llama a la devolución de llamada apropiada.
Podemos ver estos conceptos ilustrados por cambio de nombre de un archivo con Node.js:
var fs = require('fs');
// args (current file name, new file name, callback function)
fs.rename('/tmp/hello', '/tmp/world', function (err) {
// this occurs when the rename is complete
if (err) throw err;
console.log('rename complete');
});
console.log('step after rename');
El tercer argumento puede parecer extraño. Es una función sin nombre (anonymous) a la que se llamará cuando se complete el cambio de nombre.
Tenga en cuenta que desde fs.el cambio de nombre es asincrónico, es imposible saber si veremos primero el mensaje "renombrar completo" o "paso después de cambiar el nombre". Esa es la desventaja de la programación asincrónica y basada en eventos: si tenemos un conjunto complejo de tareas interdependientes, debemos ser extremadamente cuidadosos para asegurar que las tareas dependientes se completen antes de las tareas que dependen de ellas. El hecho de que el orden de finalización de la llamada asíncrona puede cambiar puede conducir a errores muy sutiles.
Consulte también:
Editar por la petición de Donald:
La mejor manera de entender node.js es descargar, compilar, insta ll, y usarlo. Necesitará:
- Mac OS o Linux. Si está cómodo con Cygwin, también puede ser una opción, pero si está ejecutando Windows, me resulta más fácil ejecutar Linux en una máquina virtual.
- Git - no es necesario pero hace que recuperar el depósito de código sea fácil.
- Una forma de depurar su aplicación. Ver this question. Inicialmente, escribir información de depuración en la consola puede funcionar. Eventualmente, querrás una depuración robusta.
- Una idea: ¿qué es lo que quieres hacer con node.js? Si está interesado en una descripción general de sus capacidades, busque its API.
La mayoría de los tutoriales se centran en la capacidad de Node.js para construir rápidamente un servidor HTTP:
Tenga en cuenta que node.js ocupa un nicho muy particular - i Está diseñado para construir programas de red. Puede que no sea la herramienta adecuada para otros tipos de programas.
Comience escribiendo muchos programas de Javascript y cuidándoselo bien. No tiene sentido siquiera considerar NodeJS si no entiendes javascript y las técnicas correspondientes. No quiero ser duro, pero eso es lo que necesitas aprender; JavaScript y cómo se usa y usa correctamente, esos son los conceptos básicos. Ergo, primero javascript maestro;) muchos awnsers sobre eso en stackoverflow. – BGerrissen
Gracias por su comentario. Me resulta difícil aprender JS porque no sé qué hacer con eso. Si quiero aprender Django, Rails, etc. sé qué hacer, no JavaScript. Además, ¿me pueden recomendar un buen libro que pueda establecer los conceptos básicos del conocimiento de node.js también? gracias – donald
Acabo de echar un vistazo a node.js. Simplemente usa la sintaxis de JS como jQuery is. ¿Siente que un conocimiento profundo de JavaScript sería mucho más útil al usar node.js? De todos modos, el libro para leer es JavaScript: La Guía definitiva – mplungjan