提问人:Vimal 提问时间:12/1/2020 更新时间:12/2/2020 访问量:67
在 for 循环中嵌套的 ajax 函数调用
Nested ajax function calls inside a for loop
问:
我研究了许多使用延迟和承诺的解决方案。在我的场景中尝试了这些解决方案,但无法获得解决方案。我一整天都在战斗。我的情况是。
我有一系列的客户。我需要对每个客户一个接一个地执行一些特定的操作,这些操作被定义为ajax。
private function main()
{
customers=["customer1","customer2"]
customers.forEach(function(customer) {
function1();
function2();
function3();
}
}
private function function1()
{
$.ajax({
type: "POST",
url: Url1,
data: {},
success: function (data) {
console.log("a");
},
dataType: 'JSON'
});
}
private function function2()
{
$.ajax({
type: "POST",
url: Url2,
data: {},
success: function (data) {
console.log("b");
},
dataType: 'JSON'
});
}
private function function3()
{
$.ajax({
type: "POST",
url: Url3,
data: {},
success: function (data) {
console.log("c");
},
dataType: 'JSON'
});
}
调用 main 函数时。我想要的输出是
a
b
c
a
b
c
但我得到的输出是
a
a
b
b
c
c
请帮我找到解决方案。
答:
0赞
Evgeniy
12/1/2020
#1
默认情况下,Ajax 调用是异步调用。行动。
function send() {
fetch(
url,
{
method: 'post',
header: {'Content-Type' : 'application/text'},
body: 'a'
}
).then(
() => {
console.log('a is sended');
fetch(
url,
{
method: 'post',
header: {'Content-Type' : 'application/text'},
body: 'b'
}
).then(
() => {
console.log('b is sended');
fetch(
url,
{
method: 'post',
header: {'Content-Type' : 'application/text'},
body: 'c'
}
).then( () => console.log('c is sended') )
}
)
}
)
}
评论
0赞
Vimal
12/1/2020
是的,我知道。我不希望它使 async:false,因为它已被弃用。我正在寻找使用延迟或承诺的其他解决方案。
0赞
Vimal
12/2/2020
我试过了..与我的问题中提到的输出类似
0赞
Vimal
12/2/2020
#2
最后,我通过在不使用循环的情况下进行递归函数调用解决了我的问题。
var customers=["customer1","customer2"];
var currentIndex=0;
private function main()
{
if(customers[currentIndex]){
function1().done(function(data) {
console.log("a");
function2().done(function(data) {
console.log("b");
function3().done(function(data) {
console.log("c");
currentIndex++;
main();
});
});
});
}
}
private function1()
{
return $.ajax({
type: "POST",
url: url1,
data: {},
dataType: 'JSON'
});
}
private function2()
{
return $.ajax({
type: "POST",
url: url2,
data: {},
dataType: 'JSON'
});
}
private function3()
{
return $.ajax({
type: "POST",
url: url3,
data: {},
dataType: 'JSON'
});
}
电流输出为
a
b
c
a
b
c
评论