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 回答