2017-01-15 18 views
0

各呼び出しの間に1秒の遅延でAPIを呼び出す必要があります。私はループのためにタイムアウトを設定している場合のみ、別の1回の呼び出しの間に2秒の遅延がある関数呼び出し間のタイムアウトを設定する

for(var i=0; i < contentSize; i++){ 
    var content = contentArray[i]; 
    var j = table[i]; 
    var thisColumn = document.getElementById(j); 
    if(content.includes('dl-media')){//content is image 
     setTimeout(function() {evaluateImage(content, thisColumn); }, 2000); 
    } 
    else if(content != ""){//content is text 
     // evalutaeText(language, content, thisColumn); 
     } 
    else{ 
      $(thisColumn).replaceWith("<div>No content</div>"); 
     } 
    } 

、しかし、それは時間がかかりすぎる:私は、タイムアウトが動作しないでこのコードを持っています私は関数呼び出しの遅延だけが必要です。

$.ajax({ 
       url: "https://westus.api.cognitive.microsoft.com/contentmoderator/moderate/v1.0/ProcessImage/Evaluate?" + $.param(params), 
       beforeSend: function(xhrObj){ 
        // Request headers 
        xhrObj.setRequestHeader("Content-Type","application/json"); 
        xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","bd43e"); 
       }, 
       type: "POST", 
       // Request body 
       data: "{'DataRepresentation':'URL', 'Value':" + content +"}", 
      }) 
      .done(function(data) { 
       $(thisColumn).replaceWith("<div id="+thisColumn.value+">" + data.AdultClassificationScore +"<br>"+ data.RacyClassificationScore + "</div>"); 
      }) 
      .fail(function() { 
       $(thisColumn).replaceWith("<div id="+thisColumn.value+">Failed</div>"); 
      }); 
+2

可能な複製(http://stackoverflow.com/questions/750486/javascript-closure-inside- loop-simple-practical-example) – Teemu

答えて

0

あなたのコードのスケジュールcontentSize要求の数サイクルのための開始の2秒後に実行される:私は呼んでいる 機能はAjax呼び出しを実行します。おそらく、それぞれ2秒に1つのリクエストを送信したい:[ループの内側にはJavaScript閉鎖 - シンプルな実用的な例]の

var requestsSent = 0; 
var requestsHandled = 0; 

setInterval(function() { 
    if (requestsSent > requestsHandled) { 
     //The previous request was not completed yet, so let's wait 
     return; 
    } 
    requestsSent++; 
    $.ajax({ 
       url: "https://westus.api.cognitive.microsoft.com/contentmoderator/moderate/v1.0/ProcessImage/Evaluate?" + $.param(params), 
       beforeSend: function(xhrObj){ 
        // Request headers 
        xhrObj.setRequestHeader("Content-Type","application/json"); 
        xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","bd43e"); 
       }, 
       type: "POST", 
       // Request body 
       data: "{'DataRepresentation':'URL', 'Value':" + content +"}", 
      }) 
      .done(function(data) { 
       requestsHandled++; 
       $(thisColumn).replaceWith("<div id="+thisColumn.value+">" + data.AdultClassificationScore +"<br>"+ data.RacyClassificationScore + "</div>"); 
      }) 
      .fail(function() { 
       $(thisColumn).replaceWith("<div id="+thisColumn.value+">Failed</div>"); 
      }); 
}, 2000); 
+0

はい、2秒ごとに1回のリクエストを送信したいと思います。残念ながら、これはどちらかの呼び出しを遅らせることはありません..すべてのリクエストは同時に送信されます:( – Freckles

+0

@ freckles.karinあなたはあなたの開発ツールをチェックして、その中のNetworkタブを確認しましたか? –

+0

エラーが発生すると同時に実行されています。https://www.screencast.com/t/KxynrUmUS – Freckles

関連する問題