如何让javascript函数与.then一起工作。然后以正确的顺序执行

时间:2017-02-28 02:42:35

标签: javascript jquery

我已经阅读了很多有关此主题的帖子,并认为我应该使用$ .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);

1 个答案:

答案 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