RequireJS, $.Deferred 怎么样?

RequireJS, $.Deferred how to?

代码如下

define(['jquery'], function ($) {
  var App = function () {
    var settings = {};
    var identity = {};

    var dSettings = $.when($.getJSON("models/settings.json"));
    var dIdentity = $.when($.getJSON("models/identity.json"));

    var dApp = $.when(dSettings, dIdentity);

    dSettings.done(function (data) {
      settings = data;
      console.log(settings);
    });

    dIdentity.done(function (data) {
      identity = data;
    });

    return {
      "settings" : settings,
      "identity" : identity
    };
  };
  return App();
});

我想创建一个模块,谁可以"know"我的设置和身份。 Return 将在延迟对象被解析并且模块 App.js 具有空的设置和身份对象之前执行。

我该怎么做?

据我所知,您希望模块获取您的设置和身份数据,并return将其作为 AMD 模块。不幸的是,你在那里有一个异步操作。您可以做的最好的事情是 return 来自模块的承诺,并让依赖模块附加 then.

// SettingsAndIdentity.js
define(['jquery'], function ($) {
  // $.when resolves when all promises passed resolves
  return $.when($.getJSON("models/settings.json"), $.getJSON("models/identity.json"))
});

// foo.js
define(['SettingsAndIdentity'], function(SettingsAndIdentity){
  // Since SettingsAndIdentity is a promise, we just attach then
  SettingsAndIdentity.then(function(settings, identity){
    // start doing things here
  });
});