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)上面的事件数据?等待结果:结果
应该是返回结果
。您的启动
函数不会返回承诺,并且不会在数据
事件中被拒绝。您需要承诺此项目。