2017-09-26 70 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)就是其中之一(当然不是一个真正的关键字,但一个非常重要的对象)