jQuery承诺在foreach
我有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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论