背景

2018-02-24 16:16 更新

本文假設(shè):

  • 你已經(jīng)熟悉了JavaScript、Java、 Python、 C++ 或者類似的語言中異常的概念,而且你知道拋出異常和捕獲異常是什么意思。
  • 你熟悉怎么用NodeJS編寫代碼。你使用異步操作的時候會很自在,并能用callback(err,result)模式去完成異步操作。你得知道下面的代碼不能正確處理異常的原因是什么[腳注1]
function myApiFunc(callback)
{
/*
 * This pattern does NOT work!
 */
try {
  doSomeAsynchronousOperation(function (err) {
    if (err)
      throw (err);
    /* continue as normal */
  });
} catch (ex) {
  callback(ex);
}
}

你還要熟悉三種傳遞錯誤的方式: - 作為異常拋出。 - 把錯誤傳給一個callback,這個函數(shù)正是為了處理異常和處理異步操作返回結(jié)果的。 - 在EventEmitter上觸發(fā)一個Error事件。

接下來我們會詳細(xì)討論這幾種方式。這篇文章不假設(shè)你知道任何關(guān)于domains的知識。

最后,你應(yīng)該知道在JavaScript里,錯誤和異常是有區(qū)別的。錯誤是Error的一個實(shí)例。錯誤被創(chuàng)建并且直接傳遞給另一個函數(shù)或者被拋出。如果一個錯誤被拋出了那么它就變成了一個異常[腳注2]。舉個例子:

throw new Error('something bad happened');

但是使用一個錯誤而不拋出也是可以的

callback(new Error('something bad happened'));

這種用法更常見,因?yàn)樵贜odeJS里,大部分的錯誤都是異步的。實(shí)際上,try/catch唯一常用的是在JSON.parse和類似驗(yàn)證用戶輸入的地方。接下來我們會看到,其實(shí)很少要捕獲一個異步函數(shù)里的異常。這一點(diǎn)和Java,C++,以及其它嚴(yán)重依賴異常的語言很不一樣。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號