2017-08-30 58 views
0

當使用firebase節點庫時,實時數據庫會返回一個promise,但如果在我的代碼中發生異常,如果.then()方法中發生異常,會發生什麼情況?我怎麼能讓代碼去.catch()方法?這是我正在嘗試去catch方法的代碼。如何使錯誤轉到catch語句

admin.database().ref('/something/something').once('value').then(function(data: admin.database.DataSnapshot) { 
    if(data.val() === null) { 
     return new TypeError('invalid'); 
    } 
}).catch(function(err) { 
    console.log(err); 
}); 

回答

1

你可以簡化你的錯誤處理的令您在使用異步伺機

async function asyncFunction() { 
    try { 
     const data: admin.database.DataSnapshot = await admin.database().ref('/something/something').once('value'); 
     if(data.val() === null) { 
      throw new TypeError('invalid'); 
     } 
    } catch (err) { 
     console.log(err); 
    } 
} 
+0

在同一眼看'var'和'異步/ await'(ES8)代碼更易讀功能讓我微笑。使用'const/let'(es6) –

+1

@GrégoryNEUT是的,你是對的,把它改爲'const' :)。但對於'async/await',你不必等到es8才能進行異步等待,如果你使用打字機:) –

+0

哦,這是正確的,沒有看到這是關於打字稿!很好的捕獲 –

2

當你聽到trycatch,你需要考慮的是throw第三個單詞!

throw new TypeError('invalid') 

enter image description here