出现错误时恢复承诺链



当我在promise中捕捉到异常时,可以再次重做promise吗?还是这被称为反模式?我知道例外情况不应该充当流程主管,但我似乎找不到任何其他解决方案来解决我的问题。考虑这个代码:

function a() {
    var flow = GenerateUsername().then(RegisterUserWithGeneratedUsername()).catch(DatabaseConstraintError, flow);
    return flow;
}
a();

这会导致什么问题?我担心,如果我在链中分配了一些东西,但它永远无法解决,这将是一个巨大的内存消耗。也许它会达到最大调用堆栈。我应该如何解决这个问题?

无休止的循环重试通常是个坏主意,但仔细重试可能间歇性失败的操作是合理的。

使用promise retry之类的方法怎么样?它允许您多次重试承诺链。例如(来自文档):

promiseRetry(function (retry, number) {
    console.log('attempt number', number);
    return doSomething()
        .catch(retry);
})
.then(function (value) {
    // .. 
}, function (err) {
    // .. 
});

还有其他选择,或者你可以自己滚。

内存分配:任何只在给then()的回调中引用的东西,一旦超出范围,就会被垃圾收集,所以除非你尽力收集在每次迭代中构建的对象,否则你应该没事。

最新更新