2017-08-30 30 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