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.

Надеюсь, это поможет вам.

Другие вопросы по тегам