JavaScript: добавить задержку в JQuery AJAX повтора - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть код в следующей структуре.Намерение состоит в том, чтобы отправить запрос Ajax и повторить его несколько раз с задержкой между попытками:

$.ajax({
  type: 'GET',
  url: 'https://example.com',
  retryLimit: 3,
  attempt: 1,
  success: function (data) {
    doStuff();
  },
  error: function (data) {
    if (this.attempt++ <= this.retryLimit) {
      var retry = function () {
        $.ajax(this);
      };
      setTimeout(retry, 1000);
    } else {
      handleError();
    }
  }
});

Проблема заключается в том, что при попытке вызова я получаю TypeError: Illegal invocation1005 *.Я также попытался заменить обещаниями, как это:

new Promise(function(resolve) {
  setTimeout(resolve, 1000);
}).then(function() {
  $.ajax(this);
});

Но я получил ту же ошибку.Что происходит и как я могу решить эту проблему?

ПРИМЕЧАНИЕ. Я использую Atlassian SDK для создания плагина Jira, поэтому моя версия javascript кажется ограниченной.Я не уверен на 100% , какая версия у меня есть, но я знаю, что она не компилируется, когда я пытаюсь использовать функции стрелок.

1 Ответ

0 голосов
/ 14 декабря 2018

Контекст this изменился к моменту выполнения функции retry() и больше не является информацией AJAX.Однако вы должны иметь возможность обернуть его в замыкание с помощью переменной:

var self = this;
var retry = function () {
    $.ajax(self);
};

(Обратите внимание, что весь этот контекст сам по себе также происходит в обратном вызове, error. Так что если thisвсе же это не то, что вам нужно, возможно, вам придется применить эту же концепцию еще выше.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...