返回介绍

deferred.promise()

发布于 2017-09-11 字数3356 浏览 848 评论 0

所属分类:延迟对象

deferred.promise( [target ] )返回: Promise

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

  • 添加的版本: 1.5deferred.promise( [target ] )

    • target
      类型: Object

      绑定 promise 方法的对象。

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

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

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

欲了解更多信息,请参阅文档< Deferred object.

例子:

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

function asyncEvent(){
    var dfd = new jQuery.Deferred();
 
    // Resolve after a random interval
    setTimeout(function(){
        dfd.resolve("hurray");
    }, Math.floor(400+Math.random()*2000));
 
    // Reject after a random interval
    setTimeout(function(){
        dfd.reject("sorry");
    }, Math.floor(400+Math.random()*2000));
 
    // Show a "working..." message every half-second
    setTimeout(function working(){
        if ( dfd.state() === "pending" ) {dfd.notify("working... ");setTimeout(working, 500);
        }
    }, 1);
 
    // Return the Promise so caller can't change the Deferred
    return dfd.promise();
}
 
// Attach a done, fail, and progress handler for the asyncEvent
$.when( asyncEvent() ).then(
    function(status){
        alert( status+', things are going well' );
    },
    function(status){
        alert( status+', you fail this time' );
    },
    function(status){
        $("body").append(status);
    }
);

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

// Existing object
var obj = {
  hello: function( name ) {
    alert( "Hello " + name );
  }
},
// Create a Deferred
defer = $.Deferred();
 
// Set object as a promise
defer.promise( obj );
 
// Resolve the deferred
defer.resolve( "John" );
 
// Use the object as a Promise
obj.done(function( name ) {
  obj.hello( name ); // will alert "Hello John"
}).hello( "Karl" ); // will alert "Hello Karl"

您暂时不能评论!

管理员开启了需要登录才能够评论,你可以免费注册一个本站的账号。

还没有评论!

目前还没有任何评论,快来抢沙发吧!