“拒绝”对jqXHRs以外的延迟对象意味着什么?

时间:2013-04-03 06:37:12

标签: jquery jquery-deferred jqxhr

来自deferred.fail() page

  

描述:添加要在Deferred对象调用时调用的处理程序   拒绝。

和例子:

$.get("test.php")
.done(function(){ alert("$.get succeeded"); })
.fail(function(){ alert("$.get failed!"); });

我们知道,我们可以创建var someObject = $.Deferred();

我的问题:

  • 如果不是jqXHR,我们如何'拒绝'延期?

  • 如何为除jqXHR以外的延迟对象实现deferred.fail()

感谢。

是的,我知道我的英语不好。

1 个答案:

答案 0 :(得分:1)

在调用.reject().rejectWith()时拒绝延迟对象。

这是一个例子:

var deferred = $.Deferred();
deferred
  .done(function() { console.log('done') })
  .fail(function() { console.log('failed') });

deferred.resolve(); // <-- will write 'done' to console
deferred.reject();  // <-- will write 'failed' to console

您可以使用延迟来使异步函数的行为与$.get()类似。例如setTimeout

function MyTimeout() {
  var deferred = $.Deferred();

  setTimeout(function() {
    // as a demo, this will reject the deferred half the time
    if (Math.random() < 0.5)
      deferred.reject();
    else
      deferred.resolve();
  }, 2000);
  return deferred.promise();
}

MyTimeout()
  .done(function() { console.log('done') })
  .fail(function() { console.log('failed') });

最后一个陈述也可以写成:

MyTimeout().then(
  function() { console.log('done') },
  function() { console.log('failed') }
);