我真的很努力地理解行为或JQuery的承诺()。
我想做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...
});
我知道我的代码并不包含任何承诺,但实际上,我所尝试的所有内容在这种情况下都失败了。
任何暗示/小贴士都表示赞赏。感谢。
答案 0 :(得分:3)
你可以将非承诺传递给jQuery' $.when
它会很好地处理它们:
$.when(15, undefined, $.ajax(...)).then(function(fifteen, undef, result){
// this will run when the result is ready
});
如果你想根据调用的结果做一些事情你可以通过.then
链接它们,如果你想一个接一个地运行它们,你可以使用可用的链接而不是同时工作的$.when
。
答案 1 :(得分:1)
我认为您正在寻找三元运算符,以及构建默认值承诺的方法:
$.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
构建已经履行的承诺。然后等待所有这三个承诺。