gpt4 book ai didi

javascript - 我是否应该改变已 promise 且已解决的值的内部状态?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:29 25 4
gpt4 key购买 nike

代码示例(可变性)

.factory('objSingleton', function ($q) {
var o = {a: 1}

setTimeout(function () {
o.a = 2
}, 1000)

return $q.when(o)
})

另一种选择是(不变性)

.factory('objFactory', function ($q) {
var promise = $q.when({a: 1})

setTimeout(function () {
promise = $q.when({a: 2})
}, 1000)

return function () {
return promise
}
})

问题

我想听到“支持”和“反对”来帮助我决定是接受还是避免处理 promise (在创建和返回它们的 API 中)非常不可变。

注意:代码示例使用 AngularJS 风格的依赖注入(inject)器,但问题和答案适用于任何和所有使用 promises 的 JS 环境。

最佳答案

promise 不应在做出此决定时发挥任何作用。

毕竟, promise 只是对可能需要时间的计算的抽象。 promise 的结果是对正常结果的抽象。

通常,具有不可变值是一种很好的做法,因为可变状态确实很糟糕无论如何。可变状态使测试更加困难。在您的情况下,可变的全局状态更糟。关于为什么的最好的文章之一是由 Angular 的作者 Misko Havery 撰写的,名为 Singletons Are Pathological Liars .

所以,答案是 - 执行您在同步代码中执行的操作。您会在同步代码中返回副本或引用吗?这是一个我无法真正回答的主观问题,但所有事实都指向“在您的代码中尽可能少的状态”。

关于javascript - 我是否应该改变已 promise 且已解决的值的内部状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23359988/

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