【发布时间】:2011-12-25 18:56:41
【问题描述】:
让我们创建一个简单的 Deferred 对象:
defer = $.Deferred( function ( defer ) {
setTimeout( defer.resolve, 3000 );
});
上面的Deferred对象会处于“pending”状态3秒,然后切换到“resolved”状态(此时所有绑定到它的回调都会被调用)。
让我们也检索该 Deferred 对象的承诺:
promise = defer.promise();
现在,要添加将在解析 Deferred 对象后调用的回调,我们可以使用 .done() 或 .then()。但是,我们可以在 Deferred 对象本身或它自己的 Promise 对象上both调用此方法。
defer.then( handler );
或
promise.then( handler );
在这两种情况下,都会调用handler 函数(在这种情况下是 3 秒后)。
如果我们使用$.when,我们可以再次传递 Deferred 对象本身或其承诺对象:
$.when( defer ).then( handler );
或
$.when( promise ).then( handler );
同样,上面两行代码没有区别。
现场演示: http://jsfiddle.net/G6Ad6/
所以,我的问题是,既然我们可以在 Deferred 对象本身上调用 .then()、.done() 等,并且因为我们可以将该 Deferred 对象传递给 $.when(),那么 .promise() 的意义何在?承诺对象?承诺对象的目的是什么?为什么会有这种功能冗余?
【问题讨论】:
标签: javascript jquery deferred