Javascript RequireJS:在回调中定义

Javascript RequireJS:在回调中定义,javascript,callback,requirejs,requirejs-define,Javascript,Callback,Requirejs,Requirejs Define,在我的模块中,我想推迟“define”调用,但在加载文件后,要求js运行回调,而不是在“defined”时。。。例如: a、 js: require(['b'],函数(b){ 控制台日志(b); }); b、 js: define({'foo':'bar'); 这与预期的写入对象{foo:bar}一样有效。 但如果我将“定义”移到延迟函数: b、 js: setTimeout(函数(){ 定义({'foo':'bar'}); }, 1000); 然后console.log(b)写入“nul

在我的模块中,我想推迟“define”调用,但在加载文件后,要求js运行回调,而不是在“defined”时。。。例如:

a、 js:

require(['b'],函数(b){
控制台日志(b);
});
b、 js:

define({'foo':'bar');
这与预期的写入对象{foo:bar}一样有效。 但如果我将“定义”移到延迟函数:

b、 js:

setTimeout(函数(){
定义({'foo':'bar'});
}, 1000);
然后console.log(b)写入“null”


怎么了?

我认为任何延迟或延迟都应该发生在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的延迟应答


希望这对您有所帮助。

您将定义延迟了1秒,require试图在计时器过期之前请求它。我可以问你为什么要推迟定义模块吗?这只是一种可能的情况。延迟可能是由ajax请求或模块准备就绪所需的任何其他异步进程造成的。创建一个负责ajax/异步逻辑的模块更有意义。这样,您就可以只需要它,并使用它提供的方法来触发任何异步内容。嗨,Buncha,我也尝试延迟define()的调用,因为我想模拟通过缓慢的internet连接检索模块。也许这不是解决问题的方法?Michael,我仍然没有延迟define()的解决方案。但我有一些建议给你们:把你们的模块打包到服务器端脚本中,在发送模块之前只使用它的sleep()函数。谢谢,我已经这样做了。但我试图以一种方式定义,当需求方对延迟一无所知时。。。