在 jquery 异步 POST 调用中使用延迟

Using deferred in jquery asynch POST call

我有这个事件的按钮:

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

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

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()};);

});

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