我正在使用jQuery Deferred的独立实现(git repo)。让问题保持简单,如果我创建了var status = _.Deferred()并从任何函数中返回status.promise(),那么是否必须为该函数中的所有步骤添加一个try catch以reject延迟错误?

最佳答案

在javascript中,try/catch并不是Java中的一种生活方式。原因是javascript有很多避免可预测类型的错误的方式。

严格来说,拒绝延期并不是必须的。通常,如果您需要执行一些fail代码,或者需要积极防止某些稍后的事件解决Deferred,则可以这样做。

极有可能认为未解决/未拒绝的Deferreds永远挂起。不一定是这种情况。在任何时候,无论直接还是通过其 promise ,都没有对Deferred的引用,可以用于垃圾回收。

也很容易想到已解决/已拒绝的延迟会自动进行垃圾收集。这也是不正确的。如果在任何范围内仍然存在对Deferred的引用,则该引用仍将存在于内存中,并且鉴于观察者方法(例如done/fail/always/then)可以在以后调用(并且可能立即触发),因此仍然有用。 )。

简而言之,就GC而言,Deferred与其他js对象一样,尽管通常使用Deferred的代码结构很难发现它们何时可用于GC。

关于javascript - 递延分辨率始终在尝试范围内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14643549/

10-13 00:18