2016-05-14 188 views
1

目前我有像下面这样的问题。继续处理之前等待事件

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

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

分享更多的代码解决,尚不清楚是否'data'事件被触发过 –

+0

@MedetTleukabiluly this.item.write(数据)这个命令触发事件数据上面 – codeaholicguy

+0

那整个'返回(result && result.then)?等待结果:result'应该只是'return result'。 – Bergi

回答

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') 
} 
相关问题