RequireJS:在回调中定义

RequireJS: defining in callback

本文关键字:定义 回调 RequireJS      更新时间:2023-09-26

在我的模块中,我想推迟"定义"调用,但是一旦加载文件,RequireJS就会运行回调,而不是在"定义"时...例如:

答.js:

require(['b'], function(b){
  console.log(b);
});

b.js:

define({'foo':'bar'});

这按预期写入对象 {foo:bar} 工作。但是,如果我将"定义"移至延迟函数:

b.js:

setTimeout(function(){
  define({'foo':'bar'});
}, 1000);

然后控制台.log(b) 写入"null"。

怎么了?

我认为任何延迟或延迟都应该发生在定义函数内部,或者您可以使用这样的回调模式:

//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 的延迟应答。

希望这对你有帮助。