对 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全部等待。