您如何看待以下内容?
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');
在j Query-1.11.1 中,我们得到:
promiseOne done
main thread finished
明显错误,在 jQuery 3.0 中,我们得到:
main thread finished
promiseOne done
希望是我们所期望的,因为承诺回调是异步执行的。
但是,将 .then 替换为 .done ,在这两种情况下我都会:
promiseOne done
main thread finished
这里发生了什么? 这仍然是jQuery 3.0或.done回调同步执行的错误吗?
答案 0 :(得分:2)
除非为了适当地终止承诺链,否则您不应该使用.done
。在Promises / A +中未指定.done
,因此没有任何问题。
promise回调是异步执行的,以便在之前的设计中为fix inherent problems。