2016-05-16 6 views
0

Dies ist mein Code einer reaktiven nativen Anwendung mit einem Login-Formular zum Versenden eines API-Aufrufs. Der Event-Handler der Login-Taste wird die apiLogin-Aktion versenden:Promise.race feuert "Timeout ist nicht definiert"

try { 
     await Promise.race([ 
      dispatch(actions.doApiLogin(this.state.username, this.state.password)), 
     timeout(15000), 
     ]); 
    } catch (e) { 
     const message = e.message || e; 
     if (message !== 'Timed out' && message !== 'Canceled by user') { 
     alert(message); 
     console.warn(e); 
     } 
     return; 
    } finally { 
     this._isMounted && this.setState({isLoading: false}); 
    } 

Es löst eine Ausnahme „timeout ist nicht definiert“. Dieser Code wurde aus Facebooks F8-Application entnommen. Ich konnte keine Details über die Promise.race-Methode finden, die auf diese Weise im Internet behandelt werden, aber Facebook führt eine App mit dem ...

Was ist falsch mit der Zeitüberschreitung?

Antwort

2

Das hat nichts mit Promise.race zu tun hat, vielleicht vergessen hat, die Funktion timeout, das ist, wie die Funktion in den source code

async function timeout(ms: number): Promise { 
    return new Promise((resolve, reject) => { 
    setTimeout(() => reject(new Error('Timed out')), ms); 
    }); 
} 

definiert ist, zu definieren, wie Sie es ein einfaches Versprechen sehen, die abgelehnt wird, wenn Millisekunden sind vergangen, Promise.race wird aufgelöst/abgelehnt mit dem ersten Versprechen, das aufgelöst/zurückgewiesen wird