javascript – 为什么$.when().pipe().then()工作,但不是$.when().then().then()?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么$.when().pipe().then()工作,但不是$.when().then().then()?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我仍然试图使用 JQuery的Deferred对象来解决问题,并且正在抓住一个特定的问题.在下面的代码中,我最初尝试链接deferred.then()但它从未起作用.所有三个功能一次执行.只有在我的同事向我指出管道功能后,事情就会落到实处.问题是,为什么pipe()工作,但不是那么()?
  1. var otherDefer = function(msg){return function(){return testDefer(msg)}};
  2. var there = otherDefer("there,");
  3. var guy = otherDefer("guy.");
  4.  
  5. function testDefer(msg) {
  6. var deferred = $.Deferred();
  7. pretendAjaxCall( function() {
  8. $('<li>'+msg+'</li>').appendTo('#msgOut');
  9. deferred.resolve();
  10. });
  11. return deferred.promise();
  12. }
  13.  
  14. function pretendAjaxCall(callback) {
  15. setTimeout(callback,1500);
  16. }
  17.  
  18. $.when(testDefer("Hi")).pipe(there).then(guy);​

当使用when().then().then()时,我也尝试使用return deferred而不是return deferred.promise().

上面代码的jsFiddle:http://jsfiddle.net/eterpstra/yGu2d/

解决方法

这就是then()和pipe()在你的示例中的工作方式:

then()返回Deferred并通过调用then()对此相同Deferred你只需添加第二个回调函数,它将与第一个同时调用

相反,pipe()返回新的Promise,允许你构建一个链,这就是你在这种情况下获得顺序调用的原因

有关管道/然后的更多信息,请查看以下资源:

When should I use jQuery deferred’s “then” method and when should I use the “pipe” method?

Promise Pipelines in JavaScript

猜你在找的JavaScript相关文章