0

これを非同期で行うにはどうすればよいですか?

var getData, myFunc;

getData = function() {
  var data = "";
  $.get("http://somewhere.com/data.xml", function(d) {
    data = $("#selector", d).html();
  });
  return data; // does not work, because async callback not yet fired
};

myFunc = function() {
  var data = getData();
  // do something with data here
};

自分が望むものを達成するために、完全にリファクタリングできてうれしいです。どのデザインパターンがこれを実現しているのかわかりません。

4

1 に答える 1

1

まあ、できません。ただし、約束を返すことができます。

var getData, myFunc;

getData = function () {
    var d = $.Deferred();
    $.get("http://somewhere.com/data.xml", function (data) {
        d.resolve($("#selector", data).html())
    });
    return d.promise();
};

getData().then(function (data) {
    alert(data);
});

デモhttp://jsfiddle.net/W75Kt/2/

于 2012-08-12T20:38:05.523 に答える