通過Node中的約定,異步回調接受錯誤作爲其第一個參數。如果成功,第一個參數不能出現。我個人用來寫Node.js中的語言成功回調
callback(undefined, result);
在這種情況下。但是,我在其他人的代碼中看到
callback(null, result);
盛行。它是否在任何地方「正式」記錄?這兩個選項中哪一個是慣用節點?有沒有什麼重要的理由可以相互比較?
通過Node中的約定,異步回調接受錯誤作爲其第一個參數。如果成功,第一個參數不能出現。我個人用來寫Node.js中的語言成功回調
callback(undefined, result);
在這種情況下。但是,我在其他人的代碼中看到
callback(null, result);
盛行。它是否在任何地方「正式」記錄?這兩個選項中哪一個是慣用節點?有沒有什麼重要的理由可以相互比較?
如果我們將「慣用節點」解釋爲「節點本身是什麼」,那麼null
就是慣用的。如果在節點提示(* nix的機器上)鍵入此,你會得到true
:
require("fs").readFile("/dev/null", function (err) { console.log(err === null) })
我與其他回調從fs
模塊嘗試,得到了相同的行爲。我還沒有在使用回調的Node API中測試所有位置。
我還沒有發現,指出節點必須在這種情況下設置err
到null
參考。
當你可以看看Node.js源代碼包(或GitHub)的'lib /'文件夾中的任何這些模塊的源代碼時,我沒有理由對它進行測試。 –
如果您擔心是否使用null與undefined,那麼請使用null。嚴格地說,在JavaScript中undefined
被認爲是異常的。
你可以在What is the difference between null and undefined in JavaScript?上閱讀更多。
還有一個關於Node.js回調約定的好帖子 - http://blog.gvm-it.eu/post/22040726249/callback-conventions-in-node-js-how-and-why。
如果有錯誤,undefined
和null
總是被認爲是相同的。
你可以使用它們兩個。人們只使用null,因爲它更短。
如果您正在檢查錯誤,則可以使用if (err == null) { ... }
方法在一條語句中檢查null和undefined。
如果回調遵循檢查該參數的慣用方法(即'if(error)'或'if(!error)'),那麼它沒有任何區別。如果回調堅持嚴格檢查(例如'error === null'或'error!== undefined'),那麼您必須首先傳遞它期望的值。 –
是的,這更像是你如何定義undefined和null的含義。 –