我需要延遲每個Ajax調用,直到前一個函數(hashcode.Sign()
)完成。不幸的是,我的代碼不會等到hashcode.Sign()
完成並且將所有東西混淆,因爲該函數會創建一個新的會話,並且它不能被覆蓋以便工作起作用。我應該怎麼做?我對延期對象很陌生,所以請原諒我缺乏知識。如何排隊jQuery延期對象?
for (var l = 0; l < fileArray.length; l++) {
var d = new jQuery.Deferred();
d.resolve(openDdoc(fileArray[l].url, $pid, fileArray[l].id));
d.done(function() { console.log('done'); });
}
function openDdoc(url, pid, fid) {
var def = new jQuery.Deferred();
$.when(def).done(function() { console.log('Function completed!'); });
def.resolve($.ajax({
url: '/open-ddoc',
type: 'post',
async: false,
data: {doc: url, pid: pid, fid: fid},
}).done(function (data) {
hashcode.Sign();
}).fail(function(data) {
console.log('this shit failed');
}));
}
hashcode.Sign()
函數包含一些更多的Ajax調用和對其他函數的調用。如果需要,我可以在後面加入。我知道我可以用setTimeout()
來解決所有這些問題,但那不會是我的第一選擇。
是的,請包括'hashcode.Sign()'。以正確的方式書寫這一點很重要。 –