2016-05-14 16 views
1

Zur Zeit habe ich ein Problem wie unten.Warten Sie auf das Ereignis, bevor Sie fortfahren

Ich erstelle eine Funktion für die Behandlung von Wiederholungen.

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

Und ich habe eine andere Methode wie

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

Aber funktionieren start nicht Wiederholungs tun. Kann ich dieses Problem irgendwie lösen?

+0

Teilen, nicht klar, ob 'data' Ereignis ausgelöst wird immer –

+0

@MedetTleukabiluly this.item.write (Daten) Mit diesem Befehl Trigger Ereignisdaten über – codeaholicguy

+0

Das ganze' zurück (Ergebnis && Ergebnis.dann)? erwarten Ergebnis: Ergebnis sollte nur 'Ergebnis zurückgeben' sein. – Bergi

Antwort

0

ich auf diese Weise aufgelöst mehr Code

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