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

$("#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,谁能帮我?

非常感谢。

最佳答案

您需要这样称呼它:

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

});


您编写方式的问题是,在从postCallOne解析延迟之前,将放置对postCallTwo的调用。您需要等待postCallOne解决,然后在postCallOne成功的情况下将postCallTwo链接起来。这就是延期存在的原因。

关于javascript - 在jQuery异步POST调用中使用延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38741335/

10-13 01:41