Šim*_*das 28 javascript jquery deferred
让我们创建一个简单的Deferred对象:
defer = $.Deferred( function ( defer ) {
setTimeout( defer.resolve, 3000 );
});
Run Code Online (Sandbox Code Playgroud)
上面的Deferred对象将处于"pending"状态3秒,然后切换到"已解决"状态(此时将调用绑定到它的所有回调).
我们还检索该Deferred对象的承诺:
promise = defer.promise();
Run Code Online (Sandbox Code Playgroud)
现在,要添加在解析Deferred对象后将要调用的回调,我们可以使用.done()或.then().不过,我们可以调用这个方法既递延对象本身或者它自己的诺言对象.
defer.then( handler );
Run Code Online (Sandbox Code Playgroud)
要么
promise.then( handler );
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,handler都将调用该函数(在这种情况下3秒后).
如果我们使用$.when,我们可以再次传递Deferred对象本身或其promise对象:
$.when( defer ).then( handler );
Run Code Online (Sandbox Code Playgroud)
要么
$.when( promise ).then( handler );
Run Code Online (Sandbox Code Playgroud)
同样,上面两行代码之间没有区别.
现场演示: http ://jsfiddle.net/G6Ad6/
所以,我的问题是因为我们可以在Deferred对象本身上调用.then(),.done()等等,因为我们可以将Deferred对象传递给$.when(),.promise()并且检索promise对象的意义是什么?promise对象的目的是什么?为什么功能上有这种冗余?