jQuery$.延迟固有的问题(jQuery 1.x/2.x)
有一篇关于jQuery延迟对象失败的非常详尽的文章:你错过了承诺的要点..在这篇文章中,多梅尼奇强调了jQuery承诺与其他承诺相比的一些缺点,包括Q、RSVP.js和ES6承诺。
我离开了多梅尼奇的文章,觉得jQuery承诺在概念上有一个固有的缺陷。我想举例说明这个概念。
我认为jQuery实现有两个关注点:
1..then
方法是不可链接的。
换句话说
promise.then(a).then(b)
jQuery将调用a
然后b
当promise
都实现了。
自.then
在其他承诺库中返回一个新的承诺,它们的等效值是:
promise.then(a)promise.then(b)
2.jQuery中出现异常处理。
另一个问题似乎是异常处理,即:
try {
promise.then(a)} catch (e) {}
在Q中相当于:
try {
promise.then(a).done()} catch (e) {
// .done() re-throws any exceptions from a}
在jQuery中,当a
捕获块失败。在另一个承诺中,任何例外a
会被带到.done
或.catch
或者其他异步捕获。如果所有的承诺API调用都没有捕获异常,那么它就消失了(因此,使用.done
若要释放任何未处理的异常,请执行以下操作。
上面的问题是否涵盖了jQuery承诺实现的问题,还是我误解或忽略了一些问题?
编辑此问题涉及jQuery<3.0;jQuery3.0alphajQuery是答应/A+兼容的。