Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待事件,然后继续处理_Javascript_Ecmascript 6_Es6 Promise - Fatal编程技术网

Javascript 等待事件,然后继续处理

Javascript 等待事件,然后继续处理,javascript,ecmascript-6,es6-promise,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)

目前我有如下问题

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

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
不执行重试操作。我有什么办法解决这个问题吗?

我用这种方法解决了

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')
}
我这样决定

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

共享更多代码,不清楚是否有
数据
事件triggered@MedetTleukabilulythis.item.write(data)这个命令触发整个
返回(result&&result.then)上面的事件数据?等待结果:结果
应该是返回结果
。您的
启动
函数不会返回承诺,并且不会在
数据
事件中被拒绝。您需要提示
此项。请共享更多代码,不清楚是否有
数据
事件triggered@MedetTleukabilulythis.item.write(data)这个命令触发整个
返回(result&&result.then)上面的事件数据?等待结果:结果
应该是返回结果
。您的
启动
函数不会返回承诺,并且不会在
数据
事件中被拒绝。您需要承诺
此项目