0

我有一个使用 jQuery 的对象Deferred来创建我自己的承诺,我会在超时后解决。然后我链接一个 ajax 调用,并返回承诺。

var Obj = function() {
  var _obj = new $.Deferred();

  setTimeout(function() {
      _obj.resolve("Resolve One!");
  }, 2000);

  return _obj.promise();
}

new Obj()
.done(function(message) {
  document.write(message);
  return $.get("http://www.jsonip.com/");
})
.done(function(response) {
  document.write(response);
})

我希望消息有“解决一个!” 并响应来自 ajax 调用的响应

预期结果:

Resolve One!{"ip":"256.256.0.0","about":"/about"}

我得到的是:

Resolve One!Resolve One!

由于我正在返回$.get(),这是一个承诺,我希望旧的承诺会被 jQuery 的承诺覆盖。我应该怎么做才能让网页内容响应?

jsfiddle:http: //jsfiddle.net/7zUKg/

4

1 回答 1

1

.done只添加处理程序。你想要.then,这也允许你返回一个新的承诺:http: //jsfiddle.net/7zUKg/1/

new Obj()
.then(function(message) {
  document.write(message);
  return $.get("http://www.jsonip.com/");
})
.done(function(response) {
  document.write(response);
})
于 2013-02-01T12:30:24.437 回答