【问题标题】:jQuery 3.0 promisesjQuery 3.0 承诺
【发布时间】:2016-02-18 13:15:52
【问题描述】:

您对以下内容有何看法?

var starter;
starter = $.Deferred();

starter.then(function () {
    console.log('promiseOne done');
});

starter.resolve();

var now=new Date().getTime();
var stop=now+5000;
while (stop>new Date().getTime()){}
console.log('main thread finished');

在 jQuery-1.11.1 中,我们得到:

promiseOne done
main thread finished

这是明显错误,在jQuery 3.0中,我们得到:

main thread finished
promiseOne done

希望这是我们所期望的,因为 promise 回调是异步执行的

但是,通过将 .then 替换为 .done,在这两种情况下我都会得到:

promiseOne done
main thread finished

这里发生了什么? 这还是 jQuery 3.0 的 bug 还是 .done 回调同步执行?

【问题讨论】:

  • 阅读此blog post延迟对象有一些变化。
  • 没有提到.done - 也许他们已经把所有时间都花在了使 Deferred.then Promise/A+ 兼容上,并且没有对他们在 Deferred 上的所有其他内容感到不满
  • @JaromandaX fwiw,试图在 jquery irc 今天查询这个,这是 .done().then() 之间的区别;一般来说,响应是规范只需要 .then() 方法,并且不应将 .done() 视为等同于 .then()irc.jquery.org/%23jquery/latest.log.html

标签: javascript jquery promise jquery-3


【解决方案1】:

您不应尽可能使用.done,除非为了适当地终止承诺链。 .done 未在 Promises/A+ 中指定,因此没有任何问题。

为了fix inherent problems 在之前的设计中,promise 回调是异步执行的。

【讨论】:

  • 我想让你看看我的bounty,其中没有人给我一个好的答案。我认为你是 Promise 方面的专家,你可以回答它......
  • 我已经在@ILIAS 上发布了一个答案——如果你有这个想法,请告诉我。
  • 那么,您如何看待 .done 回调?它们是否同步执行?顺便说一句,感谢您对我的赏金的立即回应。
猜你喜欢
  • 2012-07-17
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 2015-03-27
  • 2015-08-06
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多