2015-07-22 2 views
2

Примечание: requirejs ([], function() {}) будет асинхронно вызывать функцию обратного вызова в RequireJS 2.1+ (для более ранних версий она была синхронно вызвана). Однако при запуске в узле загрузка модуля будет загружаться с использованием вызовов синхронизации IO, а плагины-загрузчики должны синхронно разрешать вызовы на их метод загрузки. Это позволяет синхронизировать использование модуля requirejs в узле для работы через вызовы requirejs ('stringValue'):Is RequireJS загружает файлы асинхронно?

Что это значит? Означает ли это, что requirejs в узле не является асинхронной загрузкой файлов? Потому что он использует вызовы синхронизации IO?

+0

Не это ли именно то, что говорится в цитате? – Amberlamps

+1

afaik: «требовать» узла и требовать от requireJS не имеют ничего общего, двух разных разных миров. Просто одно и то же слово, используемое для определения функции загрузки. – antpaw

+0

. Я немного смущен, если он синхронно загружается, почему бы просто не использовать requirejs ('foo')? –

ответ

2

Эта цитата говорит вам:

  1. Когда RequireJS работает в узле, он может загружать модули в действительно синхронным способом, когда называется requirejs(module_name). Обратите внимание, что это не имеет эквивалента, когда RequireJS работает в браузере. Да, вы можете сделать requirejs(module_name) на стороне браузера, но это будет работать только без ошибок, если модуль имеет уже загружен, и эта загрузка происходит асинхронно. Это не синхронно. Тем не менее, тот же вызов, выполняемый через RequireJS, когда он работает в узле, действительно синхронный.

  2. Однако, когда вы вызываете его, передавая список зависимостей и обратный вызов, обратный вызов будет вызываться асинхронно. Вызов формы requirejs([], function() {}) является асинхронным как в браузере, так и в узле.

В комментарии вы спросите:

Я немного запутался, если это синхронно загружаются в любом случае, почему бы просто не использовать requirejs('foo')?

Если этот вызов предназначен для запуска только в узле, то вам не нужно беспокоиться об использовании асинхронной формы вызова. Однако, если вы пишете код, который должен быть запущен в Node, и в браузере, вы должны быть осторожны с тем, как вы используете такой вызов. Для экземпляра main.js файла, который делает:

requirejs.config({...}) 
var foo = requirejs('foo'); 
foo.whatever(); 

в лучшем случае не в состоянии периодически в браузере. По крайней мере, время от времени он поднимает "module not yet loaded for context" error. Если вы хотите, чтобы код работал без ошибок, вам необходимо:

requirejs.config({...}) 
requirejs('foo', function (foo) { 
    foo.whatever(); 
}); 
Смежные вопросы