2017-09-26 68 views
0

考慮這樣的例子:非阻塞自定義錯誤

function Object(param) { 
    if(param == null) throw new Error('custom error'); 
    return param; 
} 

var obj1 = new Object(1); 
var obj2 = new Object(); 
var obj3 = new Object(3); 

OBJ2,將阻止整個腳本的執行。是否可以阻止只執行該特定對象?如果我這樣做:

function Object(param) { 
    if(param == null) console.log(new Error('custom error')); 
    return param; 
} 

它將執行console.log 3次而不是日誌字符串一次,這也是不希望的效果。第二個代碼是非阻塞的,但它不再是錯誤的。

編輯:https://github.com/wisniewski94/sprites.js/blob/master/sprite.js

rangeErr作爲一個例子

EDIT2:事實證明,如果你在變量中設置的console.log它將始終調用日誌即使不使用這個變量。

function Object(param) { 
    var err = console.log(new Error('custom error')) 
    if(param == null) err; 
    return param; 
} 
+1

如果你拋出一個錯誤。趕上錯誤。您捕獲錯誤的位置定義了程序邏輯以及執行的內容和不執行的內容。 –

+1

_它會執行console.log 3次而不是日誌字符串一次,這也是不希望的結果._這不應該發生在您向我們顯示的代碼中!它只應該按照預期記錄一次 –

+1

至於「這不再是錯誤」,如果你想在控制檯中顯示某些錯誤,可以使用'console.error'。 –

回答

0

我通過使用console.error()拋出自定義錯誤和簡單的返回來解決了這個問題;用於阻止功能的執行。

0

什麼:

function object(param) { 
    if (param == null) { 
     console.log(new Error('custom error')); 
    } 
    return param; 
} 

可以取代console.logconsole.error

你也應該與JavaScript的保留關鍵字Object小心(用大寫字母O)就是其中之一(當然不是一個真正的關鍵字,但一個非常重要的對象)