简体   繁体   English

非阻塞自定义错误

[英]Non-blocking custom errors

Consider such example:考虑这样的例子:

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 will block execution of whole script. obj2 将阻止整个脚本的执行。 Is it possible to block execution of only that particular object?是否可以仅阻止该特定对象的执行? If I do this:如果我这样做:

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

It will execute console.log 3 times instead of log string once which is also undesired effect.它将执行 3 次 console.log 而不是 log string 一次,这也是不希望的效果。 Second code is non blocking but it's not error anymore.第二个代码是非阻塞的,但它不再是错误了。

EDIT: https://github.com/wisniewski94/sprites.js/blob/master/sprite.js编辑: https : //github.com/wisniewski94/sprites.js/blob/master/sprite.js

rangeErr as an example以 rangeErr 为例

EDIT2: turns out that if you set console.log in variable it will always call that log even without using this variable. EDIT2:事实证明,如果您在变量中设置 console.log,即使不使用此变量,它也会始终调用该日志。

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

I fixed this issue by using console.error() for throwing custom errors and simple return;我通过使用 console.error() 抛出自定义错误和简单返回来解决这个问题; for blocking execution of function.用于阻止函数的执行。

What about:关于什么:

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

you can replace console.log with console.error too您可以替换console.logconsole.error

also you should be careful with javascript's reserved keywords Object (with an uppercase O) is one of them (well not really a keyword but a really important object)你也应该小心 javascript 的保留关键字Object (带有大写的 O)是其中之一(不是真正的关键字,而是一个非常重要的对象)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM