完成所有操作后,每个操作都会进行JavaScript回调

时间:2019-11-21 09:17:43

标签: javascript jquery callback listjs

首先,您应该知道我嵌套了$.ajax个调用。第一个打印table,完成后,我在表中为$.ajax each做第二个<tr>。两者都使用async: true

之所以这样做,是因为我想给最终用户一个视图(表),然后3 <td>必须从其他URL加载数据。在解释之后:

$.ajax({
  // ...
  complete: function() {
    $('table tbody tr.product').each(function(i) {
      let line = $(this);
      ...
      // set variable
      const data = { ...
      };
      // data values are from prev varaibles
      $.ajax({
        type: 'POST',
        url: URIPOS,
        data: data,
        async: true,
        beforeSend: function() {
          tdMostSales.html('<i class="fa fa-spinner fa-spin fa-1x"></i>');
          tdSubscriptions.html('<i class="fa fa-spinner fa-spin fa-1x"></i>');
          tdGeneral.html('<i class="fa fa-spinner fa-spin fa-1x"></i>');
        },
        success: function(res) {
          const resp = JSON.parse(res);
          const {
            general,
            prevision
          } = resp;
          const {
            total,
            notified
          } = resp.subscription;
          tdMostSales.attr('data-value', prevision)
          tdMostSales.html(`${prevision}`);
          tdSubscriptions.html(`${notified}/${total}`);
          tdGeneral.html(`${general}`);
        },
        complete: function() {
          tdMostSales.blur();
        }
      });

      if (i + 1 === $('table tbody tr.product').length) {
        console.log('finished')
        var options = {
          valueNames: [
            'name',
            'sku',
            'brand',
            'match',
            'profit',
            'profit-rating',
            'sell-rating',
            {
              name: 'pvp',
              attr: 'data-value'
            },
            {
              name: 'demand-forecast',
              attr: 'data-value'
            }
          ],
          listClass: 'product-list-body'
          //pagination : true,
          //page: 20
        };
        var orderedList = new List('generator', options);
        return;
      }
    });
  }
});

但是,如果console.log('finished')还没有完成,它仍然返回$.ajax,那么它将返回<tr>,那么如何处理呢?可能在每次完成时都回调,但是在哪里或如何做?

我不认为这是重复的帖子...因为我不想提出不同的ajax,然后再得到一个response,我需要提出一个请求,一旦完成,进行下一个,则第二个必须迭代每个tr并为每个tr进行请求,但要异步,一旦完成(无需提出更多请求),return就会在所有tr被迭代之后做出响应由ajax

0 个答案:

没有答案