deferred.rejectWith()


deferred.rejectWith( context [, args ] )返回: Deferred

描述: 拒绝Deferred(延迟)对象,并根据给定的 contextargs参数调用任何失败回调函数(failCallbacks)。

  • 添加的版本: 1.5deferred.rejectWith( context [, args ] )

    • context
      类型: Object
      Context(上下文) 作为 this对象传递给失败回调函数(failCallbacks )
    • args
      类型: Array
      传递一个可选的参数数组给失败回调函数(failCallbacks )

通常情况下,只有递延对象(Deferred)的创建者才能调用此方法; 您可以通过deferred.promise()返回的受限制的 Promise 对象,来防止其他代码改变递延的状态 。

注:

jQuery提供的deferred.promise()方法的作用是,在原来的Deferred 对象上返回另一个 Deferred 对象,即受限制的 Promise 对象,受限制的 Promise 对象只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。

首先看一个 Deferred对象的执行状态被改变的例子:http://jsbin .com/zapeve/1/;
代码的尾部加了一行dtd.resolve(),这就改变了dtd对象的执行状态,因此导致done()方法立刻执行

再看一个 Deferred对象返回deferred.promise()的例子:http://jsbin.com/fuvude/1/;
wait()函数返回的是promise对象。然后,我们把回调函数绑定在这个对象上面,而不是原来的deferred对象上面。这样的好处是,无法改变promise对象的执行状态,要想改变执行状态,只能操作原来的deferred对象。

当延迟对象被 rejected 时,任何通过 deferred.thendeferred.fail 添加的 failCallbacks,都会被调用。回调函数的执行顺序和它们被添加的顺序是一样的。传递给 deferred.reject()args参数,会传给每个回调函数。当延迟对象进入 rejected 状态后,再添加的任何 failCallbacks,当它们被添加时,就会被立刻执行,并带上传入给 .reject() 的参数。有关详细信息,请参阅文件Deferred object