2013-04-12 41 views
0

比方说,我在一个块中有50行javascript语句。有没有一种方法可以让脚本在任何一行发生错误时继续运行,而不必为每行使用大量的try catch块?错误后继续执行javascript没有很多try catch语句

+0

必须没有在你的代码的任何错误:)做适当的验证等.. – karaxuna

+1

你必须使用全局错误处理一样, 阅读本问题http://stackoverflow.com/questions/951791/javascript-global-error-handling –

+1

@karaxuna有时你会期望发生错误。 – C5H8NNaO4

回答

1

你的问题是有点问题的。如果你在一个块中有50条语句可以独立失败,那么我得出的结论是这些语句之间没有关系。 在这个例子中

var a = 1; 
var b = a + 2; 

b变量依赖的结果。如果不是这种情况,我认为,这些陈述被放置在一个区块中的唯一原因是它们必须同时被执行。在这种情况下,我还假设那些语句更像带有副作用的函数,比如C#-void函数或Actions。你并不在意表达式的结果。

你需要把每个表达式放在try- [catch |终于]阻止,我没有别的选择。为了使它更简洁一些,你可以这样做如下:

var tryF = function() { 

    // convert arguments to normal array 
    var args = [].slice.call(arguments, 0, arguments.length); 

    // if has function to execute 
    if(args.length > 0) 
    { 
     var func = args[0];//alert(func); 
     try {func();} 
     finally { 

      // if has next function to execute 
      if(args.length>1) { 
      tryF.apply(null, args.slice(1, args.length)); 
      } 
     } 
    } 
} 
// usage 
{ 
    // first function has a error, it won't block the next 
    tryF(function() { aslert(1); }, function() { alert(1); }); 
} 
+0

在我的情况下,我有很多操作来处理复杂的对象例如:var a = bcd ....这里属性b,c,d可能是未定义的,但这对我的操作是正常的。但是我需要对每个对象执行大量的检查(比如if(b!= undefined && bc!= undefined ...)等等)或者将语句放在try {var a = bcd ..中。 }这块太笨拙了。 – konghou

1

试试这个:

1: <head> 
    2: <script language="javascript"> 
    3: function stoperror() 
    4: { 
    5: return true 
    6: } 
    7: window.onerror=stoperror(); 
    8: </script> 
    9: </head> 
+1

不起作用..脚本停止。顺便说一下https://developer.mozilla.org/en-US/docs/DOM/window.onerror说:“请注意,有些/许多错误事件不会触发window.onerror,你必须专门听取它们。” ..这些错误究竟是什么? – konghou

+0

尝试抓住似乎是唯一的方式然后... http://stackoverflow.com/questions/2978291/on-error-resume-next-in-javascript – Fabiotocchi