¿Es 'obligatorio' sincrónico en AMD (definición de módulo asíncrono)? Si es así, ¿qué hace que esta especificación sea asincrónica? ¿Qué sucede si requiero require() (y aún no se ha cargado) en el medio de mi código, paralizará la ejecución? Hablando del lado del navegador.Javascript: ¿Es obligatorio el método sincrónico en AMD (definición de módulo asíncrono)?
Respuesta
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.
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.
- 1. Sincrónico Vs asíncrono en el iPhone
- 2. ¿El formulario se envía sincrónico o asíncrono?
- 3. Obteniendo comportamiento sincrónico en javascript?
- 4. ¿Por qué meteor.js es sincrónico?
- 5. ¿Utiliza un módulo javascript no compatible con AMD con require.js?
- 6. ¿Cómo se puede ampliar un módulo Javascript definido con AMD?
- 7. ¿Devuelve el valor del método de JavaScript asíncrono?
- 8. Llamar a un método asíncrono de un método no asíncrono
- 9. Javascript AMD Modules: Cómo obtener Visual Studio intellisense en los módulos
- 10. Prueba de una llamada al método asíncrono
- 11. ¿Cómo marcar un método obligatorio?
- 12. ¿Cómo distribuir el módulo entre múltiples archivos AMD?
- 13. ¿Por qué Underscore.js eliminó el soporte para AMD?
- 14. ¿Es posible abortar un XmlHttpRequest sincrónico?
- 15. ¿Cómo se escribe el método asíncrono simple?
- 16. XAML: ¿es obligatorio LayoutRoot?
- 17. Cobertura de código JavaScript en los módulos RequireJS/AMD
- 18. Cómo crear un método asíncrono
- 19. Definición de modelos de mangosta en el módulo separado
- 20. ¿Es posible hacer obligatorio el valor de una anotación Java?
- 21. Reemplazar el mensaje "este campo es obligatorio" en django admin
- 22. ¿Es posible ejecutar CUDA en GPU AMD?
- 23. ADO.NET asíncrono
- 24. macro definición en javascript
- 25. ¿es obligatorio optimizar el índice de lucene después de escribir?
- 26. Javascript: ¿El método de longitud es eficiente?
- 27. ¿Es OBLIGATORIO JavaScript en el navegador DEBE obtener páginas ASP.NET en funcionamiento?
- 28. ¿Cuándo es síncrono JavaScript?
- 29. Excepciones lanzadas en javascript asíncrono no capturado
- 30. ¿Es posible llamar a un método de espera en un método no asíncrono?