AMD模块需要AJAX调用的结果



我可以定义一个依赖项是动态AJAX调用结果的AMD模块吗?

例如:

define([ 'jquery', 'config' ], function ($, config) {
    $.get(config.API + 'getSomething', { key: config.KEY }).done(function (res) {
        // I want res to be what this module returns
    });
});

我可以做到:

define([ 'jquery', 'config' ], function ($, config) {
    return $.get(config.API + 'getSomething', { key: config.KEY });
});

但每当我需要这个模块时,我都必须附加一个done,我宁愿不这样做:

define([ 'something-module' ], function (something) {
    something.done(function (res) {
        // All my codes here
    });
});

如果我能在考虑加载模块之前等待API调用的结果,然后返回调用的结果会更干净,但我不知道这是否可能。

AMD模块的结果可以是任何类型的对象

基于Jquery AJAX文档,您可以将async paramter设置为false,并阻止进程以完成请求

请注意,同步请求可能会暂时锁定浏览器,从而在请求激活时禁用任何操作

我建议您返回Promises作为模块的结果,该模块可以在未来实现或拒绝,并避免阻塞浏览器。

最新更新