出错时重做承诺链
Redo promise chain on error
当我在 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()
的回调中引用的内容一旦超出范围就会被垃圾收集,因此除非您不厌其烦地收集在每次迭代中构造的对象,否则您应该没事。
当我在 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()
的回调中引用的内容一旦超出范围就会被垃圾收集,因此除非您不厌其烦地收集在每次迭代中构造的对象,否则您应该没事。