【发布时间】:2016-05-14 04:45:25
【问题描述】:
目前我遇到如下问题。
我创建了一个处理重试的函数。
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 不会重试。有什么办法可以解决这个问题吗?
【问题讨论】:
-
分享更多代码,不清楚
data事件是否被触发 -
@MedetTleukabiluly this.item.write(data) 这个命令触发上面的事件数据
-
整个
return (result && result.then) ? await result : result应该只是return result。 -
您的
start函数不会返回承诺,并且不会在data事件中被拒绝。你需要承诺this.item。
标签: javascript ecmascript-6 es6-promise