我可以克隆一个承诺吗?

时间:2016-05-06 02:31:40

标签: javascript promise

我有一个返回promise的异步函数。该操作只应执行一次。我希望该函数的所有调用者都能获得相同的Promise,但我不希望一个调用者的.catch() es影响另一个调用者。我可以克隆一个承诺,或者以另一种方式实现这个吗?

1 个答案:

答案 0 :(得分:4)

  

但我不希望.catch()个一个来电者影响另一个来电者。

他们永远不会 1 (除非你链接了回调,否则你不会)。

  

我希望该函数的所有调用者都能获得相同的Promise

做吧。承诺是不可变的值 2

  

我可以克隆一个承诺吗?

如果你真的需要 3 一个独特的对象,它将遵循原始的承诺(当它完成时满足或拒绝它时拒绝),你可以使用不带参数的then方法:< / p>

var clone = promise.then();
console.assert(clone !== promise);

1:假设您使用了正确的promise库。我想我能记住一个库(旧的jQuery?)的情况,其中then回调结果改变了承诺的状态。
2:至少在他们的解决行为中。当然,每一个承诺仍然只是一个目标 3:你没有。你真的不应该。我只是回答标题问题,但你应该停止做奇怪的事情。