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 に答える