RequireJS: определение в обратном вызове
В моем модуле я хочу отложить вызов "define", но RequireJS выполняет обратный вызов после загрузки файла, а не после "определения"... Например:
a.js:
require(['b'], function(b){
console.log(b);
});
b.js:
define({'foo':'bar'});
Это работает как ожидаемый объект записи {foo:bar}. Но если я перейду "определить" к отложенной функции:
b.js:
setTimeout(function(){
define({'foo':'bar'});
}, 1000);
затем console.log(b) пишет "null".
В чем дело?
1 ответ
Я думаю, что любая задержка или отсрочка должна происходить внутри функции define, или вы можете использовать какой-то шаблон обратного вызова, например так:
//a.js
require(['b'], function(b){
b.getData(
function(data) {
console.log(data);
}
);
});
//b.js
define(function(){
this.getData = function(callback) {
setTimeout(function(_callback){
return function() {
_callback({'foo':'bar'});
}
}(callback), 1000);
}
return this;
});
Используя этот шаблон, вы можете установить функцию обратного вызова в a.js для обработки отложенного ответа от b.js.
Надеюсь, это поможет вам.