加载中...

deferred.promise()1.6+


概述    deferred.promise( [target ] )

返回值:Promise

描述:返回Deferred(延迟)的Promise(承诺)对象。

  • V : 1.5deferred.promise( [target ] )

    • target
      类型: Object
      绑定 promise 方法的对象。

deferred.promise() 方法允许一个异步函数阻止那些干涉其内部请求的进度(progress)或状态(status)的其它代码。Promise (承诺)对象仅会暴露那些需要绑定额外的处理或判断状态的延迟方法(then, done, fail, always, pipe, progress, state,和 promise)时,并不会暴露任何用于改变状态的延迟方法(resolve, reject, notify, resolveWith, rejectWith, 和 notifyWith).

如果提供target参数,deferred.promise() 会将事件绑定到该参数上,然后返回该对象,而不是创建一个新的对象。 这个方法可以用于在已经存在的对象上绑定 Promise 行为的情况。

如果您要创建一个Deferred(延迟),并且保持这个Deferred(延迟)的引用,以便它可以在一些点来解决或拒绝。通过deferred.promise()定义Promise(承诺)对象即可。这样的话,其它的代码就可以注册回调函数或检查当前状态。

示例

实例

创建一个延迟对象,并设定两个延时时间是随机的定时器,分别用于受理(resolve)和拒绝(reject)延迟对象。无论哪一个先执行,都会调用其中一个回调函数。而另一个定时器则不会产生任何效果,因为在最先调用的那个定时器处理中,延迟对象已经处于完成状态(resolved 或 rejected 状态)。同时,还会设定一个定时器进度(progress)通知函数,用于进度通知处理,并在文档的 "body" 中显示 "working..."。

  1. function asyncEvent() {
  2. var dfd = jQuery.Deferred();
  3. // Resolve after a random interval
  4. setTimeout(function() {
  5. dfd.resolve( "hurray" );
  6. }, Math.floor( 400 + Math.random() * 2000 ) );
  7. // Reject after a random interval
  8. setTimeout(function() {
  9. dfd.reject( "sorry" );
  10. }, Math.floor( 400 + Math.random() * 2000 ) );
  11. // Show a "working..." message every half-second
  12. setTimeout(function working() {
  13. if ( dfd.state() === "pending" ) {
  14. dfd.notify( "working... " );
  15. setTimeout( working, 500 );
  16. }
  17. }, 1 );
  18. // Return the Promise so caller can't change the Deferred
  19. return dfd.promise();
  20. }
  21. // Attach a done, fail, and progress handler for the asyncEvent
  22. $.when( asyncEvent() ).then(
  23. function( status ) {
  24. alert( status + ", things are going well" );
  25. },
  26. function( status ) {
  27. alert( status + ", you fail this time" );
  28. },
  29. function( status ) {
  30. $( "body" ).append( status );
  31. }
  32. );

实例

Use the target argument to promote an existing object to a Promise:

  1. // Existing object
  2. var obj = {
  3. hello: function( name ) {
  4. alert( "Hello " + name );
  5. }
  6. },
  7. // Create a Deferred
  8. defer = $.Deferred();
  9. // Set object as a promise
  10. defer.promise( obj );
  11. // Resolve the deferred
  12. defer.resolve( "John" );
  13. // Use the object as a Promise
  14. obj.done(function( name ) {
  15. obj.hello( name ); // will alert "Hello John"
  16. }).hello( "Karl" ); // will alert "Hello Karl"


还没有评论.