对 JQuery 个承诺感到困惑
Confused about JQuery promises
我真的很努力去理解这种行为或 JQuery 的 promise()。
我想做 3 个(不相关,但背靠背)AJAX 个查询:
1. GET the user data
2. POST an image
3. POST another image
然后,我正在做大量基于上述查询结果的事情。
现在,$.when(ajax, ajax, ajax).then(userData, img1, img2) 函数现在非常适合这个,但是 如果我希望我的 ajax 调用环绕条件怎么办,就像这样:
$.when(
if(...){
$.ajax({ ...GET user data... });
}
if(...){
$.ajax({ ...POST image... });
}
if(...){
$.ajax({ ...POST image... });
}
).then(function(userData, img1, img2){
if(img1){
...do something with img1...
}
...same for other responses...
});
我知道我的代码不包含任何 promise,但实际上,在这种情况下,我尝试的一切都非常糟糕。
任何 hint/tip 感谢。谢谢
您可以将非承诺传递给 jQuery 的 $.when
它会很好地处理它们:
$.when(15, undefined, $.ajax(...)).then(function(fifteen, undef, result){
// this will run when the result is ready
});
如果你想根据调用的结果做一些事情,你可以通过.then
链接它们,如果你想运行它们一个在另一个之后,您可以使用 thenable 链接而不是同时工作的 $.when
。
我认为您正在寻找三元运算符,以及一种构建默认值承诺的方法:
$.when(
… ? $.ajax({/* GET user data */}) : $.when(null),
… ? $.ajax({/* POST first image */}) : $.when(null),
… ? $.ajax({/* POST second image */}) : $.when(null)
).then(function(userData, img1, img2){
if (userData)
… // do something with userData
if (img1)
… // do something with img1
…
});
这将根据各自的条件,发送一个 ajax 请求并获得对其结果的承诺,或者为值 null
构建一个已经实现的承诺。然后三个promise全部等待。
我真的很努力去理解这种行为或 JQuery 的 promise()。
我想做 3 个(不相关,但背靠背)AJAX 个查询:
1. GET the user data
2. POST an image
3. POST another image
然后,我正在做大量基于上述查询结果的事情。
现在,$.when(ajax, ajax, ajax).then(userData, img1, img2) 函数现在非常适合这个,但是 如果我希望我的 ajax 调用环绕条件怎么办,就像这样:
$.when(
if(...){
$.ajax({ ...GET user data... });
}
if(...){
$.ajax({ ...POST image... });
}
if(...){
$.ajax({ ...POST image... });
}
).then(function(userData, img1, img2){
if(img1){
...do something with img1...
}
...same for other responses...
});
我知道我的代码不包含任何 promise,但实际上,在这种情况下,我尝试的一切都非常糟糕。
任何 hint/tip 感谢。谢谢
您可以将非承诺传递给 jQuery 的 $.when
它会很好地处理它们:
$.when(15, undefined, $.ajax(...)).then(function(fifteen, undef, result){
// this will run when the result is ready
});
如果你想根据调用的结果做一些事情,你可以通过.then
链接它们,如果你想运行它们一个在另一个之后,您可以使用 thenable 链接而不是同时工作的 $.when
。
我认为您正在寻找三元运算符,以及一种构建默认值承诺的方法:
$.when(
… ? $.ajax({/* GET user data */}) : $.when(null),
… ? $.ajax({/* POST first image */}) : $.when(null),
… ? $.ajax({/* POST second image */}) : $.when(null)
).then(function(userData, img1, img2){
if (userData)
… // do something with userData
if (img1)
… // do something with img1
…
});
这将根据各自的条件,发送一个 ajax 请求并获得对其结果的承诺,或者为值 null
构建一个已经实现的承诺。然后三个promise全部等待。