0

我是一名新程序员,其主要背景是 Java。我正在尝试像在 Java 中那样用 Javascript 编写程序的故障处理。在 java 中,我使用 Apache HTTP 客户端来创建客户端并调用 Httpget 请求。

 HttpClient cli = new DefaultHttpClient();
 cli.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
 HttpResponse resp = null;
 for (int i = 0 ; i < 5 ; i++) {
 try {
 resp = cli.execute(new HttpGet("http://example.org/products"));
 }
 catch{//code}
 }

我不确定如何在 javascript 环境中模拟这种行为。有没有人对这个领域有洞察力或知识?

4

2 回答 2

1

在 javascript 中,就像在其他一些语言中一样,“异常”处理大多被错误检查所取代。例如,您将在发出请求时检查 xmlhttprequest 对象的状态:

httpRequest.onreadystatechange = function() {
    if (httpRequest.readyState === 4) {
        if (httpRequest.status === 200) {
                // ok, no "exception"
            } else {
                // BOOM ! "exception"
            }
        }
    }
}

异常只在少数地方有用,比如 parseInt。

但我不确定沉重的“容错”javascript代码是否有意义:

  • 你真的不知道你的代码将在哪里以及如何执行
  • 所有重要的检查和所有重要的持久性都是客户端

您的全局系统必须考虑到浏览器是一个外部域:进入您的服务器的任何内容都不能被信任。

于 2012-07-03T17:56:00.077 回答
0

这是您的代码片段的完全等价物,但在 JavaScript 中!

 var cli;
 var callback = function(resp) {
    // due to the asynchronous nature of XMLHttpRequest, you'll need to put all logic that uses the response in a callback function.
    // code below using responseText
    console.log(resp);
 };
 var timeout = 5000;
 var handler = function() {
    var errorSeries;
    if (this.readyState === 4) { // indicates complete
        errorSeries = parseInt(this.status.toString().charAt(0)); // will be "2" or "3" for 200 or 300 series responses
        if (errorSeries === 2 || errorSeries === 3) {
            callback.call(this, this.responseText);
        } else {
            // handle http error here
        }
    }
 }
 for (var i = 0 ; i < 5 ; i++) {
 cli = new XMLHttpRequest(); // ActiveXObject('Microsoft.XMLHTTP') in IE8 and below
 cli.timeout = timeout;
 cli.onreadystatechange = handler;
 try {
    cli.open('GET','http://example.org/products');
    cli.send();
 }
 catch(e) {
 }

如果上面看起来罗嗦,那是因为它是。其他评论者已经把你引向了正确的方向:考虑使用像 jQuery 这样的库来抽象出这种样板。

于 2012-07-03T18:37:18.777 回答