javascript - 我怎样才能包装这些函数以便它们的异常总是得到处理?

标签 javascript exception

我已经浏览了这里关于这个主题的线程,但找不到我想要的东西。

我有一堆返回字符串的函数,我希望它们在输入错误时不返回字符串,我也不希望程序退出并且我不想在 try/中包装每个调用捕获。

function foo(num){
  if(num > 5){
    throw SomeException("Input too big")
  }else{
    return "bar"+num
  }
}

我想记录一个错误,如“6 对于 foo 来说太大了”,而不是退出程序。但这将是一种 api,所以我不希望用户每次使用时都必须尝试/捕获 这些功能之一。这是一个 nodejs 脚本。

这行得通,但是很尴尬:

f = {
  command : function(cmd,arg){
              try {
                console.log(q[cmd](arg));
              }
              catch (e) {
                console.log("Error: " + e + " for " + cmd);
              }
            },
  foo : function(str){
              throw ("foo error");
        },
  foo2 : function(str){
           throw ("foo2 error");
         }

};
f.command("foo",2);
f.command("foo2",3);

最佳答案

[[Edit]] 这是一个 nodeJS 脚本。然后使 API 异步。我们不在 nodeJS 中进行同步操作。请保存事件循环。

您还可以将 API 重新设计为异步

function foo(num, cb){
  if(num > 5){
    cb(SomeException("Input too big"));
  }else{
    cb(null, "bar"+num);
  }
}

foo(5, function(err, data) {
   ...
});

您可以引用公共(public)记录器实例。

MyLibrary.errorHandler = defaultErrorHandler() ||配置.errorHandler

然后让 defaultErrorHandler 成为

function(error) {
    if (console && console.log) { console.log(error.message); }
    $("#errordiv").text(error.message);
}

function foo(num){
  if(num > 5){
    MyLibrary.errorHandler(new Exception("blargh"));
  }else{
    return "bar"+num;
  }
}

关于javascript - 我怎样才能包装这些函数以便它们的异常总是得到处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588736/

相关文章:

javascript - 如何在动态生成的文本中突出显示可编辑的单词?

javascript - 当您放置刚才单击的 'a' 时如何保持(并显示)当前 'history.back()' 元素

javascript - 如何使变量 "Counter"计算随机创建并通过单击消失的 "div' s 的数量

android - Android Lollipop 上的 MediaRecorder 问题

iphone - 如何找出 Xcode 调试器(适用于 iPhone)中引发的异常?

javascript - .empty() jQuery 方法和未定义的值

javascript - 在 Tomcat 中更改 .xml.gz 的 mime 类型

java - 是否可以创建一个等待整个 try block 执行的 catch block ?

exception - 如何在 Flutter 中传递(在方法堆栈中)异常?

c++ - boost::graph astar 算法无一异常(exception)