【发布时间】: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