一応サンプルだけ
javascript
1<script>
2$(function(){
3 console.log("start");
4 var defs=[
5 $.ajax({url:"test.php",data:{sleep:1},cache:false,}).done(function(data){console.log(3)}),
6 $.ajax({url:"test.php",data:{sleep:2},cache:false,}).done(function(data){console.log(1)}),
7 $.ajax({url:"test.php",data:{sleep:3},cache:false,}).done(function(data){console.log(2)}),
8 ];
9 $.when.apply(null,defs).done(function(){
10 console.log("end");
11 });
12});
13</script>
PHP
1<?PHP
2sleep($_GET["sleep"]);
3?>
Promiseが返らなくても
Defferedを複数発行すれば非同期全体をまってくれる(Promise.all)はずですけどね
javascript
1$(function(){
2 console.log("start");
3 var defs=Array(3).fill(null).map(function(){return $.Deferred()});
4 setTimeout(function(){console.log(1);return defs[0].resolve()},3000),
5 setTimeout(function(){console.log(2);return defs[1].resolve()},1000),
6 setTimeout(function(){console.log(3);return defs[2].resolve()},2000),
7 $.when.apply(null,defs).then(function(){
8 console.log("end");
9 });
10});
一連の処理後に更に処理
javascript
1function f() {
2 var d=$.Deferred();
3 var deferredArray=[];
4 for(let i = 0; i < 10; i++) {
5 var deferredFunc = function(){
6 return $.ajax({url:"y.php"}).then(function(){
7 console.log(i);
8 });
9 };
10 deferredArray.push(deferredFunc());
11 }
12 $.when.apply(null, deferredArray).then(function(){
13 console.log("end");
14 d.resolve();
15 });
16 return d.promise();
17}
18f().then(function(){
19 console.log('test');
20});