【问题标题】:RequireJS, $.Deferred how to?RequireJS、$.Deferred 怎么办?
【发布时间】:2015-06-30 18:00:17
【问题描述】:

下面是代码

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();
});

我想创建一个可以“知道”我的设置和身份的模块。 Return 将在 Deferred 对象被解析并且模块 App.js 具有空的 Settings 和 Identity 对象之前执行。

我该怎么做?

【问题讨论】:

  • 仅供参考,在此var dSettings = $.when($.getJSON("models/settings.json")); 中使用$.when() 的理由为零。它可以是var dSettings = $.getJSON("models/settings.json");$.getJSON() 已经返回了一个你所需要的承诺。

标签: javascript jquery require amd deferred


【解决方案1】:

据我所知,您希望该模块获取您的设置和身份数据并将其作为 AMD 模块返回。不幸的是,你在那里有一个异步操作。您可以做的最好的事情是从模块返回一个承诺,并让依赖的模块附加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
  });
});

【讨论】:

  • 难道 require.js 不允许模块依赖 json 文件吗?
猜你喜欢
  • 2012-10-05
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
相关资源
最近更新 更多