在继续处理之前等待事件

时间:2016-05-14 04:45:25

标签: javascript ecmascript-6 es6-promise

目前我遇到如下问题。

我创建了一个处理重试的函数。

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没有重试。我有什么方法可以解决这个问题吗?

1 个答案:

答案 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')
}