Установить время ожидания между вызовами функций

Мне нужно вызвать API с задержкой в 1 секунду между каждым вызовом. У меня есть этот код, в котором тайм-аут не работает:

  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>");
        }
  }

Только если я устанавливаю тайм-аут на цикле for, то существует задержка в 2 секунды между одним вызовом к другому, но тогда это занимает слишком много времени, и мне нужна только задержка на вызове функции.
Вызываемая функция выполняет вызов Ajax:

$.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>");
          });

1 ответ

  1. Ваш код планирует contentSizeколичество запросов, которые должны быть выполнены после 2 секунд начала цикла for. Вы, вероятно, хотите отправить один запрос в каждые две секунды:

    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);