Jquery $. Когда не дожидается обещаний разрешить, отклонить - PullRequest
0 голосов
/ 11 июня 2018

У меня есть динамический массив вызовов API, которые нужно отключить.Тем не менее, jQuery $ .when, по-видимому, не ожидает обещаний разрешить или отклонить, или я не понимаю, как правильно использовать обещания.

Код

function addEntry(data) {
  return new Promise(function(resolve, reject) {
    _customAPIClass_.post('some/url/path', data)
      .done(function(){
        console.log('resolving');
        resolve(1000)
      })
      .catch(function(){
        console.log('rejecting');
        reject(2000);
      })
  });
}

let deferreds = [];

$.each(form.find(el), function(i, element) {
  let data = {
    id: $(element).find('.id').val(),
    name: $(element).find('.name').val()
  }
  deferreds.push(addEntry(data));
}

if (deferreds.length) {
  $.when.apply(deferreds).then(function(data){
    console.log('All done', data)
  }, function(err){
    console.log('error', err);
  });
}

Вывод на консоль Два вызова API, отклоняющие обещание после выполнения .then () console output

Итак, что я не делаю?Я не понимаю, а какие другие вопросы здесь, касающиеся переполнения стека или документации по jQuery, не помогают мне решить, почему .then() ведет себя так, как будто все в порядке до того, как вызовы API завершены, разрешены или отклонены их обещания?Как мне обрабатывать, разрешает или отклоняет после выполнения всех вызовов API, или я неправильно понимаю цель .when() и обещаний?

1 Ответ

0 голосов
/ 11 июня 2018

Изменение:

$. When.apply (отложенные)

на:

$. When.apply ($, отложенные)

Asописано здесь: https://medium.com/sungthecoder/making-multiple-ajax-calls-and-deciphering-when-apply-array-b35d1b4b1f50 и как упомянуто в комментарии Кевина Б.:

"Когда мы вызываем функцию $ .when (), ключевое слово" this "внутри функции неявно связывается с объектом jQuery. Но когдамы вызываем $ .when.apply (), мы должны явно связать ключевое слово this с чем-то. И мы знаем, что привязка должна быть к объекту jQuery, поэтому мы передаем объект jQuery, он же $, в качестве первого аргумента. "

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