在jquery asynch POST调用中使用deferred

时间:2016-08-03 10:43:35

标签: javascript jquery post jquery-deferred deferred

我有一个关于此事件的按钮:

$("#getSensorsObs").click(function (e) {
        e.preventDefault();
        postCallOne();
        postCallTwo();
    });

当postCallOne在第一次调用成功完成时,我希望postCallTwo触发。

function postCallOne() {
  setWait();
  //do something

  return $.post(ADDRESS, {fieldONE : fieldOneVal })
    .done(function (data) {
        console.log("RESPONSE SUCCESS ");
        // do something

    }).error(function(x, t, m) {
            alert(x + ' ' + t + ' ' + m);
        }
    }).then(function (resp) {
        return $.Deferred(function(def){
        def.resolveWith({},[resp == 1,valueSelected]);
    }).promise();
});

这是第二个功能:

function postCallTwo() {
  setWait();
  //do something

  return $.post(ADDRESS2, {fieldONE : fieldOneVal })
    .done(function (data) {
        console.log("RESPONSE SUCCESS ");
        // do something

    }).error(function(x, t, m) {
            alert(x + ' ' + t + ' ' + m);
        }
    });
});

我尝试过:

  $("#button").click(function (e) {
        e.preventDefault();
        postCallOne.then( function(){postCallTwo();});

    });

但我已经返回postCallOne.done不是一个函数。

我不太清楚Deferred,谁能帮助我?

非常感谢。

1 个答案:

答案 0 :(得分:1)

你需要这样称呼它:

$("#button").click(function (e) {
    e.preventDefault();
    postCallOne().then(function() {postCallTwo()};);

});

你写的方式的问题是postCallTwo的调用将放在从postCallOne解析deferred之前。您需要等待postCallOne解决,然后在postCallOne成功后链接postCallTwo。这就是推迟存在的原因。