2012-09-29 12 views

Respuesta

1

Para RequireJS:

Tienes que pasar un método de devolución de llamada junto con los módulos necesarios para .require(), que será despedida cuando los recursos se cargaron con éxito. Entonces, por supuesto, usted debe/solo puede acceder a los módulos AMD o CommonJS cargados dentro de esa devolución de llamada.

para NodeJS:

Sí, .require() Cómo funciona sincrónicamente. NodeJS usa el sistema de módulos CommonJS, no AMD.

2

Aquí hay dos conceptos diferentes de synchronous. El primero es "¿Detendrá toda mi página web, y se sentará a esperar el archivo".

La respuesta es no. RequireJS no hace eso si tienes un script con dependencias.

Si lo usa de forma adecuada, usa un sistema de promesa. Lo que eso significa es que si envía su devolución de llamada y define sus requisitos para ese archivo, la devolución de llamada no se ejecutará hasta que se carguen todos los archivos necesarios.

Si hay un requerimiento dentro de uno de esos archivos requeridos, entonces ESA llamada no se ejecutará hasta que se hayan cargado las dependencias de ITS.

La devolución de llamada más externa (la que estaría en la parte inferior de la secuencia de comandos, normalmente), no se ejecutará hasta que todo lo que contenga tenga.

Esto funciona en un sistema de promesa. Vale la pena entender cómo funcionan los sistemas de promesa (similar a un patrón de observador, en cierto modo). Están destinados a ser pasados ​​por alto o encadenados, en función de un evento, en lugar de tener varias personas escuchando en cualquier orden.

var widget = new Widget(), 
    widgetLoaded = widget.load(url); // return a promise to let the program use the widget 

widgetLoaded.then(function() { widget.move(35); }) 
      .then(function() { widget.setColour("Blue"); }) 
      .then(function() { widget.show(); }); 

Esto es como volver this, para que pueda llamadas a funciones de cadena, excepto que las llamadas en realidad no ocurren hasta que se complete widget.load().

El widget realmente controlará cuando esto suceda, manteniendo su promesa si el widget se carga y todo está bien, o incumpliendo su promesa si algo salió mal.

En la mayoría de los sistemas de promesa, .then o como lo llamen, o bien lleva dos funciones (guardados y rotos - en mis sistemas, quebrados son siempre opcional), o tomar un objeto con success y failure-$.ajax hace esto y luego le permite predeterminar qué desea hacer con los datos cuando se cargan o si fallan, promete.

De modo que su página sigue funcionando al 100% de forma asíncrona (sin interrumpir la interfaz de usuario), pero es 100% sincrónica porque todos los módulos se dispararán en el orden correcto.

Una cosa que debe recordar : Si usted tiene estas dependencias en su código, no se puede tener ninguna dependencia por ahí en la parte inferior de su script, a la espera de ejecutar, en línea. Deben estar todos bloqueados dentro de su devolución de llamada, o bloqueados dentro de una función a la espera de ser llamado por su devolución de llamada.

Esto es simplemente porque es un proceso asíncrono, en términos de procesamiento real, y no bloquear el navegador de eventos de carreras/JS, haciendo que la página, etcétera.

Cuestiones relacionadas