我有一个关于此事件的按钮:
$("#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,谁能帮助我?
非常感谢。
答案 0 :(得分:1)
你需要这样称呼它:
$("#button").click(function (e) {
e.preventDefault();
postCallOne().then(function() {postCallTwo()};);
});
你写的方式的问题是postCallTwo的调用将放在从postCallOne解析deferred之前。您需要等待postCallOne解决,然后在postCallOne成功后链接postCallTwo。这就是推迟存在的原因。