1

您如何看待以下问题?

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

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

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

promiseOne done
main thread finished

这里发生了什么?这仍然是 jQuery 3.0 或 .done 回调同步执行的错误吗?

4

1 回答 1

2

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

为了解决先前设计中的固有问题,promise 回调是异步执行的。

于 2016-02-18T15:22:35.353 回答