我有一个返回promise的异步函数。该操作只应执行一次。我希望该函数的所有调用者都能获得相同的Promise,但我不希望一个调用者的.catch()
es影响另一个调用者。我可以克隆一个承诺,或者以另一种方式实现这个吗?
答案 0 :(得分:4)
但我不希望
.catch()
个一个来电者影响另一个来电者。
他们永远不会 1 (除非你链接了回调,否则你不会)。
我希望该函数的所有调用者都能获得相同的Promise
做吧。承诺是不可变的值 2 。
我可以克隆一个承诺吗?
如果你真的需要 3 一个独特的对象,它将遵循原始的承诺(当它完成时满足或拒绝它时拒绝),你可以使用不带参数的then
方法:< / p>
var clone = promise.then();
console.assert(clone !== promise);
1:假设您使用了正确的promise库。我想我能记住一个库(旧的jQuery?)的情况,其中then
回调结果改变了承诺的状态。
2:至少在他们的解决行为中。当然,每一个承诺仍然只是一个目标
3:你没有。你真的不应该。我只是回答标题问题,但你应该停止做奇怪的事情。