2012-09-29 11 views

risposta

1

Per requireJS:

Devi passare un metodo di callback accanto ai moduli richiesti per .require(), che andranno sparati quando le risorse sono stati caricati con successo. Quindi, ovviamente, è possibile/solo accedere ai moduli AMD o CommonJS caricati solo all'interno di tale callback.

per NodeJS:

Sì, .require() funziona in modo sincrono. NodeJS utilizza il sistema del modulo CommonJS, non AMD.

2

Qui ci sono due diversi concetti synchronous. Il primo è "interromperà la mia intera pagina web e mi siederò ad aspettare il file".

La risposta è no. RequireJS non lo fa se hai uno script con dipendenze.

Se lo si utilizza in modo appropriato, utilizza un sistema di promessa. Ciò significa che se si invia la richiamata e si definiscono i requisiti per quel file, la richiamata non verrà eseguita fino a quando non verranno caricati tutti i file richiesti.

Se è richiesto uno di questi file richiesti, la chiamata CHE non verrà eseguita fino a quando le dipendenze ITS non saranno caricate.

Il callback più esterno (quello che si troverà nella parte inferiore dello script, normalmente), non verrà eseguito fino a quando tutto ciò che è dentro non lo è.

Questo funziona su un sistema di promessa. Vale la pena capire come funzionano i sistemi di promessa (in un modo simile a un modello di osservatore). Sono pensati per essere passati in giro o incatenati, in base a un evento, piuttosto che avere più persone che ascoltano in qualsiasi ordine.

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(); }); 

Questo è come tornare this in modo da poter chiamate di funzione a catena, salvo che le chiamate in realtà non accadere fino widget.load() è completa.

Il widget controlla effettivamente quando ciò accade, mantenendo la sua promessa se il widget viene caricato e tutto è a posto, o rompendo la sua promessa se qualcosa è andato storto.

Nella maggior parte dei sistemi promessa, .then o come diavolo si chiamano, o prende due funzioni (curati e rotti - nei miei sistemi, brokens sono sempre opzionali), oppure prendere un oggetto con success e failure-$.ajax fa questo , e quindi ti consente di predeterminare cosa vuoi fare con i dati quando è caricato, o se fallisce - promette.

Così la tua pagina funziona ancora al 100% in modo asincrono (senza interrompere l'interfaccia utente), ma è sincronizzata al 100% in quanto tutti i moduli verranno attivati ​​nell'ordine corretto.

Una cosa che si deve ricordare : Se si dispone di queste dipendenze nel codice, non si può avere dipendenze giro sul fondo dello script, in attesa di esecuzione, in linea. Devono essere tutti bloccati all'interno della richiamata o bloccati all'interno di una funzione in attesa di essere richiamati dalla richiamata.

Questo è semplicemente perché è un processo asincrono, in termini di elaborazione effettiva, e non bloccherà il browser da eventi di corsa/JS, il rendering della pagina, eccetera.

Problemi correlati