目前我遇到如下问题。
我创建了一个处理重试的函数。
function retry(fn, maxTimes) {
const attempt = async (time) => {
try {
const result = fn()
return (result && result.then) ? await result : result
}
catch (err) {
if (time === maxTimes) throw err
return await attempt(++time)
}
}
return attempt()
}
我有另一种方法,比如
_handleData(data) {
throw new Error('this is error')
}
const data = ''
const start = () => {
this.item.on('data', ::this._handleData)
this.item.write(data) // trigger event data
}
try {
await retry(start, MAX_RETRY_TIMES)
}
catch (err) {
console.log('error', err)
}
但是函数start
没有重试。我有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
我通过这种方式解决了
startApp() {
const data = ''
const start = () => {
try {
const sendData = await this._sendData(data)
this._handleData(sendData)
}
catch (err) {
throw err
}
}
try {
await retry(start, MAX_RETRY_TIMES)
}
catch (err) {
console.log('error', err)
}
}
_sendData(data) {
return new Promise((resolve) => {
this.item.on('data', resolve)
this.item.write(data) // trigger event data
})
}
_handleData(data) {
throw new Error('this is error')
}