2016-11-27 2 views
2

У меня есть функция, которая получает обратный вызов в качестве параметра. Например:Как получить ошибку и результат при использовании ждут

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

Я тогда promisify его:

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

Тогда я называю это:

result = await sendMessageFunc(params); 

Я действительно хочу, чтобы получить (status, response), чтобы затем сделать:

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

Но это не va синтаксис крышки. Что мне делать? Что такое объект «result», который возвращается мне?

ответ

1

Весь смысл await является расплющить вас асинхронный код, чтобы быть как синхронным код, который бы кинуть в случае ошибки (как JSON.parse, например)
при ожидании на асинхронной функции - если асинхронная функция вернулась через результат - возвращается, как если бы функция была синхронной,
, если асинхронная функция выбрала исключение - await повторно выбрасывает ее, как если бы функция была синхронной.

так, прежде всего, нет «статуса», только исключения. вы должны окружить выражение await с try/catch:

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

обещание это просто удобный автомобиль для реализации сопрограммы (что асинхронное/ОЖИДАНИЯ ключевых слов на самом деле создать). не думайте с точки зрения обещаний при использовании await, это всего лишь деталь реализации.

Смежные вопросы