如果這是一個API調用,通常情況下,要保存爲消費者拋出一部分,而不是在內部處理它。
...或者在內部處理轉換爲JSON的部分,但是如果有加載錯誤或轉換錯誤,讓外部世界與oops一起生活。
這是我的意思;我們跳過承諾爲第二:
function getData() {
var data = null;
try {
data = getSomeData();
} catch (e) { } // ignore it
return data;
}
var data = getData();
var name = data.property.name; // BOOM
如果它要扔,你應該抓住它(它會更好,如果沒有拋出,但好些,因爲它會拋出,比不了知道)。
function getData() {
var data = getSomeData();
return data;
}
var data;
var name;
try {
data = getData();
name = data.property.name;
} catch (e) { /* now at the right level */ }
當然投擲一般不是很好。也不是null,這取決於你在函數式編程中的立場。
如果我們做這個是返回一個承諾一個電話:
function getData() {
return callServer()
.then(response => JSON.parse(response));
}
getData()
.then(showData)
.catch(showError);
如果錯誤是內部處理的,它永遠不會使它的最終用戶來處理的事實,他們的東西丟失。如果您返回空值,那麼他們必須在其then()
中執行各種null
-檢查。
第二個看起來更漂亮 –