проблема с несколькими вызовами AJAX с индексом - PullRequest
0 голосов
/ 03 марта 2019

У меня есть особая архитектура кода, и запрос состоит в том, чтобы выполнять вызовы AJAX в цикле.Я получаю проблему, когда индекс цикла всегда является его максимальным значением из-за асинхронных вызовов, которые выполняются в цикле.Пожалуйста, дайте мне знать, что было бы правильным способом реализовать это замыкание, чтобы можно было делать вызовы для каждого значения массива.

for (ii = 0; ii < 2; ii++) {                                
    ImgViewerNS.init.getJson(ur1mgfeed_array[ii],
        function (data){                                          
            if (data.d.__count > 0) {
                 //
                 //
            }
        },
        ImgViewerNS.init.logError)
 }
 .
 .
 .
 getJson: function (endpointUri, success, error) {
     $.ajax({
         url: endpointUri,
         type: "GET",
         processData: false,
         contentType: "application/json;odata=verbose",
         headers: {
             "Accept": "application/json;odata=verbose"
         },
         success: success,
         error: error
      });
}
.
.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

В цикле for используйте let, чтобы определить ii переменную, чтобы она имела область действия уровня блока, а не область действия уровня функции.

for (let ii = 0; ii < 2; ii++) {                                
...rest of your code...

Эта проблема возникает из-за того, что вы используете async функции внутри цикла for, цикла for или любой код JavaScript не ожидает выполнения метода async и временичто метод async достигает вызова стека, ссылки на закрытие сохраняют последние значения.

Вы можете обратиться к этой статье, чтобы узнать больше об этом - https://hackernoon.com/how-to-use-javascript-closures-with-confidence-85cd1f841a6b

0 голосов
/ 03 марта 2019

Вы можете использовать асинхронную функцию

async function makeCall() {
  for (let ii = 0; ii < 2; ii++) {
    await ImgViewerNS.init.getJson(ur1mgfeed_array[ii],
      function(data) {
        if (data.d.__count > 0) {
          //
          //
        }
      },
      ImgViewerNS.init.logError)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...