2016-11-27 2 views
2

Ich habe eine Funktion, die einen Rückruf als Parameter erhält. Zum Beispiel:Wie bekomme ich Fehler und Ergebnis bei der Verwendung erwarten

client.sendMessage(params, (status, response) => { 
    console.log('Status: ', status); 
    console.log('API Response:\n', response); 
}); 

ich es dann promisify:

const Promise     = require('bluebird'); 
const sendMessageFunc: Object = Promise.promisify(client.sendMessage); 

Dann nenne ich es:

result = await sendMessageFunc(params); 

Ich möchte eigentlich die (status, response) erhalten, dann tun:

(status, response) = await sendMessageFunc(params); 
console.log('Status: ', status); 
console.log('API Response:\n', response); 

Aber das ist nicht va Deckelsyntax. Was soll ich machen? Was ist das "Ergebnis" -Objekt, das mir zurückgegeben wird?

Antwort

1

Der ganze Sinn der await ist asynchronen Code zu glätten wie ein Synchroncode zu sein, die in einem Fehlerfall (wie JSON.parse zum Beispiel)
wenn wartet auf eine asynchrone Funktion werfen würde - wenn die asynchrone Funktion ein zurück Ergebnis - es wird zurückgegeben, als wäre die Funktion synchron,
, wenn die asynchrone Funktion eine Ausnahme auslöst - await löst es erneut aus, als wäre die Funktion synchron.

also, vor allem gibt es keinen "Status", nur Ausnahmen. Sie sollten Ihren await Ausdruck mit try/catch umgeben:

try{ 
    let response = await sendMessageFunc(params); 
    console.log('API Response:\n', response); 
} 
catch(e){ 
    console.error('an error was thrown: ' + e.toString()); 
} 

das Versprechen nur eine bequeme Fahrzeug ist ein Koroutine (was async/await Keywords tatsächlich schaffen) zu implementieren. Denken Sie nicht an Versprechen, wenn Sie await verwenden, es ist nur ein Implementierungsdetail.

Verwandte Themen