让我们创建一个简单的Deferred对象:
defer = $.Deferred( function ( defer ) {
setTimeout( defer.resolve, 3000 );
});
上述Deferred对象将保持“pending”状态3秒钟,然后切换到“resolved”状态(此时绑定到它的所有回调函数都将被调用)。
我们还将检索该Deferred对象的Promise:
promise = defer.promise();
现在,要添加在Deferred对象解决后将被调用的回调函数,我们可以使用.done()
或.then()
。但是,我们可以在Deferred对象本身或其自己的promise对象上同时调用此方法。
defer.then( handler );
或者promise.then( handler );
在这两种情况下,handler
函数将被调用(在此例中是3秒后)。如果我们使用
$.when
,我们可以再次传递Deferred对象本身或其promise对象。$.when( defer ).then( handler );
或者$.when( promise ).then( handler );
再次强调,上述两行代码没有区别。
现场演示: http://jsfiddle.net/G6Ad6/
所以,我的问题是既然我们可以在Deferred对象本身上调用.then()
、.done()
等方法,而且我们也可以将该Deferred对象传递给$.when()
,那么.promise()
和获取promise对象有什么意义呢?promise对象的目的是什么?为什么会有这种重复的功能?