【发布时间】:2016-08-31 23:46:42
【问题描述】:
我有一个返回承诺的异步函数。该操作只能执行一次。我希望该函数的所有调用者都能取回相同的 Promise,但我不希望一个调用者的 .catch()es 影响另一个调用者。我可以克隆一个 Promise,或者以其他方式实现它吗?
【问题讨论】:
标签: javascript promise
我有一个返回承诺的异步函数。该操作只能执行一次。我希望该函数的所有调用者都能取回相同的 Promise,但我不希望一个调用者的 .catch()es 影响另一个调用者。我可以克隆一个 Promise,或者以其他方式实现它吗?
【问题讨论】:
标签: javascript promise
但我不希望一个呼叫者的
.catch()es 影响另一个呼叫者。
他们从不1这样做(除非你链接了回调,但你没有这样做)。
我希望该函数的所有调用者都返回相同的 Promise
就去做吧。 Promise 是不可变的值2.
我可以克隆一个承诺吗?
如果您确实需要3 一个遵循原始承诺的不同对象(当它完成时执行或在它拒绝时拒绝),您可以使用不带参数的then 方法:
var clone = promise.then();
console.assert(clone !== promise);
1:假设你使用了一个合适的 Promise 库。我想我记得一个库(旧 jQuery?)的案例,其中then 回调结果改变了承诺的状态。
2:至少在他们的解决行为中。当然,每个承诺仍然只是一个对象。
3:你没有。你真的不应该。我只是在回答标题问题,但你应该停止做奇怪的事情。
【讨论】: