Используйте $.when (), Чтобы Принудительно Запустить Вторую функцию После завершения Первой функции

#jquery #ajax

#jquery #аякс

Вопрос:

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

  • work_order_rectify()
  • update_work_order_info()

Оба содержат запросы AJAX внутри функций, и я пытаюсь заставить одну функцию работать после того, как вторая завершит все запросы AJAX. Первая функция может содержать 100 AJAX-запросов, выполняемых асинхронно внутри host_rectify() и device_rectify() . Вторая функция-это один AJAX-запрос. В поисках ответов — я вижу $.when().then() $.when().done() , что есть и, как предполагается, включает в себя функциональность .promise (). Но мои две основные функции, похоже, все еще работают одновременно? Должен ли я включать отложенные функции в функции?

Вот как выглядит мой файл .js

 function work_order_rectify() {   [...]   $(future_hosts)  .each(function() {   host_rectify(host_rectify_button)    })   $(filtered_future_devices)  .each(function() {   device_rectify(device_rectify_button)  })  }  function update_work_order_info(  work_order, ) {   $.ajax({  type: 'GET',  headers: {  'X-CSRFToken': csrftoken,  },  url: '/ajax/update_work_order_header/',  dataType: 'json',  data: {  'work_order': work_order,  },  async: true,  success: function(work_order_info) {   [...do stuff...]   })  }  $.when(work_order_rectify())  .then(function() {  update_work_order_info(work_order)  })  

Я пытаюсь заставить update_work_order_info() сделать вызов AJAX после work_order_rectify() завершения.

Комментарии:

1. $.когда потребности обещают функционировать. Ни одна из ваших функций не возвращает обещания в том виде, в каком они написаны в данный момент. Если бы они вернули обещание, $.когда не было бы необходимости. work_order_rectify необходимо довольно сильно переработать, чтобы сделать то, что вы хотите, предполагая, что функции, которые он вызывает, также асинхронны.

2. Да, функции внутри work_order_rectify() используют асинхронность. Вы имеете в виду внутренние work_order_rectify() потребности return new Promise() с моими функциями исправления внутри него?

3. Да, ему нужно будет вернуть обещание, но это обещание нужно будет выполнить, когда будет выполнена вся работа, выполняемая функцией, а не где-либо еще.