【发布时间】:2021-01-11 03:18:56
【问题描述】:
尝试创建一个函数retry,该函数返回一个函数,该函数调用并返回从回调函数传递其参数并捕获错误的值。如果捕获到错误,它应该返回带有 catch 的回调函数。如果错误数超过计数,则抛出错误。
这是目前为止所做的:
const retry = (count, callback) => {
let attempts = 1;
const _retry = async (...args) => callback(...args)
.catch(err => {
if (attempts > count) throw err
attempts++
return _retry(...args)
});
return _retry
}
调用时出现problem:
var r = Math.random().toString(36).slice(2)
var arg = (n) => async (...v) =>
--n < 0 ? v : Promise.reject(Error(`>>> x:${v}`))
await retry(3, arg(2))(r)
【问题讨论】:
-
我认为您在将函数作为参数传递时调用了该函数-> arg(2)
-
_retry是什么。它似乎没有被声明... -
不是真的,还有一个 arg:async (...v)
-
@AluanHaddad 可能是 const _retry 和 return _retry
-
是的,但如果不是,那么您将在异步上下文中更改隐式全局变量,那将是一场灾难。您必须声明它或使其成为命名函数表达式而不是箭头函数,这样也可以。
标签: javascript typescript asynchronous