jQuery承诺在foreach

发布于 2025-02-10 08:53:52 字数 2212 浏览 1 评论 0原文

我有2个功能返回的承诺,我想在循环循环中链接。发生的事情是执行第一个函数,直到在执行数组的第二个功能之前完成foreach

我期望的是,对于每个链接getlandingPagename被执行,然后将新值传递给我传递给我传递给createLandingPage 的表单。 。

$('#btn_multi_lp').on('click', () => {
  let links = (findLpURL(HTML)) ? findLpURL(HTML) : getHrefLink(HTML);

  if (links) {
    let linksByNbr = countOccurrences(links);

    Object.keys(linksByNbr).forEach((link) => {
      let formLp = new FormData();
      formLp.append('campaign_id', $('#campaign_id').val())
      formLp.append('crea_id', 80);

      getLandingPageName($campaignName).then((dataLp) => {
        formLp.append('lp_name', dataLp.name);
        formLp.append('validated_lp', link);

        createLandingPage(formLp).then(() => {
          formLp.delete('validated_lp');
          formLp.delete('lp_name');
        }).catch((err) => {
          alert(err);
        })
      }).catch((error) => {
        console.log(error);
      })
    });
  }
});


function getLandingPageName(campaignName) {
  return new Promise((resolve, reject) => {
    $.ajax({
      type: 'POST',
      url: "{{ route('account-creative-getlandingpagename') }}",
      data: {
        campaignName: campaignName,
        _method: 'POST' //we need this so we can send string data to server
      },
      dataType: "json",
      success: (data) => {
        resolve(data);
      },
      error: (jqXHR, textStatus, error) => {
        reject('\nstatus code ' + jqXHR.status + '\n details: ' + jqXHR.responseText);
      }
    });
  });

function createLandingPage(formData) {
  return new Promise((resolve, reject) => {
    $.ajax({
      type: 'POST',
      url: "{{ route('account-lp-create') }}",
      data: formData,
      dataType: "json",
      cache: false,
      contentType: false,
      processData: false,
      success: (data) => {
        /* data {success, response_lp, lp_paired_name } */
        resolve(data);
      },
      error: (jqXHR, textStatus, error) => {
        reject('creativeInstall : \nstatus code ' + jqXHR.status + ' \ndetails: ' + jqXHR.responseText);
      }
    });
  });
}

I've got 2 functions returning promises that I would like to chain within a foreach loop. What's happening is that the first function is executed until the foreach is done before doing the second function for the array.

What I would expect is that for each link, getLandingPageName is executed then pass the new value coming from it to a form that I pass to createLandingPage.

$('#btn_multi_lp').on('click', () => {
  let links = (findLpURL(HTML)) ? findLpURL(HTML) : getHrefLink(HTML);

  if (links) {
    let linksByNbr = countOccurrences(links);

    Object.keys(linksByNbr).forEach((link) => {
      let formLp = new FormData();
      formLp.append('campaign_id', $('#campaign_id').val())
      formLp.append('crea_id', 80);

      getLandingPageName($campaignName).then((dataLp) => {
        formLp.append('lp_name', dataLp.name);
        formLp.append('validated_lp', link);

        createLandingPage(formLp).then(() => {
          formLp.delete('validated_lp');
          formLp.delete('lp_name');
        }).catch((err) => {
          alert(err);
        })
      }).catch((error) => {
        console.log(error);
      })
    });
  }
});


function getLandingPageName(campaignName) {
  return new Promise((resolve, reject) => {
    $.ajax({
      type: 'POST',
      url: "{{ route('account-creative-getlandingpagename') }}",
      data: {
        campaignName: campaignName,
        _method: 'POST' //we need this so we can send string data to server
      },
      dataType: "json",
      success: (data) => {
        resolve(data);
      },
      error: (jqXHR, textStatus, error) => {
        reject('\nstatus code ' + jqXHR.status + '\n details: ' + jqXHR.responseText);
      }
    });
  });

function createLandingPage(formData) {
  return new Promise((resolve, reject) => {
    $.ajax({
      type: 'POST',
      url: "{{ route('account-lp-create') }}",
      data: formData,
      dataType: "json",
      cache: false,
      contentType: false,
      processData: false,
      success: (data) => {
        /* data {success, response_lp, lp_paired_name } */
        resolve(data);
      },
      error: (jqXHR, textStatus, error) => {
        reject('creativeInstall : \nstatus code ' + jqXHR.status + ' \ndetails: ' + jqXHR.responseText);
      }
    });
  });
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文