gpt4 book ai didi

javascript - promise 回调是否发送到事件队列?

转载 作者:行者123 更新时间:2023-11-28 06:23:49 24 4
gpt4 key购买 nike

考虑以下代码:

        function wait(ms) {
var deferred = $.Deferred();
setTimeout(deferred.resolve, ms);
return deferred.promise();
}

var starter, promiseOne;
starter = $.Deferred();
promiseOne = starter.then(function () {
console.log("Calling promiseOne");
return wait(2000);
}).done(function () {
console.log('promiseOne done');
});
starter.resolve();

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

通过运行它,我得到以下结果:

Calling promiseOne
timeout finished
promiseOne done

我认为 promise 回调会发送到事件队列,所以我期待这些结果:

timeout finished
Calling promiseOne
promiseOne done

如果不发送到事件队列,我希望:

Calling promiseOne
promiseOne done
timeout finished

有人可以向我解释一下为什么我会得到第一个三合会吗?

附注通过将 then 替换为 done,我得到:

Calling promiseOne
promiseOne done
timeout finished

最佳答案

promise 的 jQuery 实现不符合 ECMASCRIPT,例如,jQuery promise (实际上)不会在下一个事件循环中得到解决。 jQuery promise 将与即将推出的第三版兼容 es:jQuery.Deferred is now Promises/A+ compatible .

注意:您是否尝试在异步函数中运行 starter.resolve() ?例如:window.setTimeout(starter.resolve, 0);这样做你的测试用例应该按预期工作。顺便说一句,这不是一个 Promise 错误,而是一个简单的 jQuery 错误实现,请记住 jQuery 诞生于 Promise 规范的前一年

为了回复:

Are promise callbacks sent to Event queue?

Promise 回调是简单的 javascript 回调,因此,作为每个简单的 javascript 回调,甚至 Promise 回调也会附加到事件循环。

关于javascript - promise 回调是否发送到事件队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35299321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com