2016-11-27 20 views
2

コールバックをパラメータとして受け取る関数があります。たとえば:awaitを使用した場合のエラーと結果の取得方法

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ではありません蓋の構文。私は何をすべきか?私に返されている「結果」オブジェクトは何ですか?

答えて

1

awaitの全体のポイントは、エラーの場合に投げることになる同期コード(例えば等JSON.parse)のようになり、あなたの非同期コードを平坦化することである
非同期関数に待っ - 非同期関数が返した場合結果 - 非同期関数が例外をスローした場合は、
のように、関数が同期しているかのように返されます。awaitは、関数が同期しているかのように再スローされます。

したがって、まず「ステータス」はなく、例外のみがあります。あなたはtry/catchであなたのawait式を囲む必要があります。

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

約束は(/非同期(async)キーワードが実際に作成待つものです)コルーチンを実装するだけで便利な乗り物です。 awaitを使用していると約束しているとは思わないが、それは単なる実装の詳細です。

関連する問題