我已经阅读了很多有关此主题的帖子,并认为我应该使用$ .when和.then或.done来满足我的需求,但不确定如何实现它。您可以提供的任何帮助表示赞赏。
我有两个可以同时运行的函数,第三个函数只能在前两个函数完成后运行。这是我正在做的事情的基本细分。
function one() {
//do lots of stuff to get variable values set
return $.post("sess_push.php", {hotel:hotel, hlng:hLng, hlat:hLat})
.done(function( data ) {
console.log("Done in function one");
alert( "Done in function one" );
});
} //end function one
function two() {
//do lots of stuff to get variable values set
return $.post("sess_push.php", {metro:metro, lat:lat, lng:lng})
.done(function( data ) {
console.log("Done with function 2");
alert ("Done with function 2");
});
} //end function two
function three() {
console.log("Starting function 3");
alert("Starting function 3");
$.post("itenerary.php", {})
.done(function( data ) {
$("#itenerary").html(data);
});
} // end function three
如何使用promises和/或deferred来按照我需要的顺序执行这些操作?
我尝试使用以下$ .when,但在其他两个完成之前运行三次。 $ .when(one(),two())。then(three,myFailure);
答案 0 :(得分:0)
我确信有更好的方法可以完成这项工作,但这就是我的诀窍。感谢Jaromanda X为我以前的工作提供了基础。如果其他人有办法优化这一点,我会全力以赴。
function one() {
var d = $.Deferred();
//do lots of stuff to get variable values set
$.post("sess_push.php", {hotel:hotel, hlng:hLng, hlat:hLat});
console.log("Done in one");
d.resolve();
return d.promise();
} //end function one
function two() {
var d = $.Deferred();
//do lots of stuff to get variable values set
$.post("sess_push.php", {metro:metro, lat:lat, lng:lng});
console.log("Done with two");
d.resolve();
return d.promise();
} //end function two
function three() {
var d = $.Deferred();
$.post("itenerary.php", {})
.done(function( data ) {
$("#itenerary").html(data);
console.log("Done in 3");
});
d.resolve();
return d.promise();
} // end function three