返回async requirejs完成对外部函数的回调值

时间:2015-02-22 19:45:14

标签: javascript requirejs

我有一个问题,我需要等到requirejs加载一些“二级”依赖项,然后将一个计算对象返回到我的requirejs模块。

当然,我知道我可以在第一个define语句中传递所有依赖项,是否有其他方法可以做到这一点?

示例:

define(
    ['require', 'jquery', 'underscore'], 

    function (require, $, _) 
    {
        var fooBar = require(['foo', 'bar'], function(foo, bar) 
        {
            return new FooBar(foo, bar);
        });

        return fooBar;
    }
);

这个模块返回一个localRequire回调,而不是我想从第二个require语句获取返回值,所以我的FooBar对象。

我怎样才能达到类似的目的? 谢谢,对不起我的英语,如果我犯了错误,我是意大利人..

2 个答案:

答案 0 :(得分:0)

define(function (require) { 
   var $ = require('jquery');
   var _ = require('underscore');
   var foo = require('foo');
   var bar  = require('bar');
  return new FooBar(foo, bar);   
});

答案 1 :(得分:0)

以下代码使用require作为SYNC请求,但在浏览器中,如果依赖项在同一文件中定义或在调用require之前加载,则可以使用SYNC请求。 大部分时间都是有用的javascript minimizer。

define('foo', ['dep1', 'dep2'], function(){
    return foo;
});
define('bar', ['dep1', 'dep2'], function(){
    return bar;
});

define(
    ['require', 'jquery', 'underscore'], 

    function (require, $, _) 
    {
        var foo = require('foo');
        var bar = require('bar');
        return new FooBar(foo, bar);
    }
);

其他解决方案是使用Promises承诺您将返回新对象:

define(
    ['require', 'jquery', 'underscore'], 

    function (require, $, _) 
    {
        var promise = new Promise(function(fulfill, reject){
            require(['foo', 'bar'], function(foo, bar) 
            {
                fulfill(new FooBar(foo, bar));
            });
        });

        return promise;
    }
);