gpt4 book ai didi

javascript - 为什么 Promise 库使用事件循环?

转载 作者:可可西里 更新时间:2023-11-01 17:15:57 25 4
gpt4 key购买 nike

考虑以下 JavaScript 代码:

var promise = new Promise();
setTimeout(function() {
promise.resolve();
}, 10);

function foo() { }
promise.then(foo);

在我见过的 promise 实现中,promise.resolve() 会简单地设置一些属性来指示 promise 已解决,并且 foo() 稍后会在事件循环期间被调用,但它看起来像 promise.resolve( ) 将有足够的信息来立即调用任何延迟函数,例如 foo()。

事件循环方式看起来会增加复杂度并降低性能,那么为什么要使用它呢?

虽然我对 promises 的大部分使用是在 JavaScript 中,但我提出问题的部分原因是在性能非常密集的情况下实现 promises,比如 C++ 游戏,在这种情况下,我想知道我是否可以利用一些好处 promise 没有事件循环的开销。

最佳答案

所有 promise 实现,至少是好的实现。

这是因为将同步性混合到异步 API 中是 releasing Zalgo .

promises 有时不会立即 resolve 而 defer 有时意味着 API 是一致的。否则,您将在执行顺序中得到未定义的行为。

function getFromCache(){
return Promise.resolve(cachedValue || getFromWebAndCache());
}

getFromCache().then(function(x){
alert("World");
});
alert("Hello");

事实上 promise libraries defer,意味着上述 block 的执行顺序是有保证的。在像 jQuery 这样的违背 promise 的实现中,顺序会根据项目是否从缓存中获取而改变。这很危险。

具有不确定的执行顺序是非常危险的,并且是错误的常见来源。 Promises/A+ 规范在这里把你扔进了成功的陷阱。

关于javascript - 为什么 Promise 库使用事件循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23447876/

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