簡短的回答:像往常一樣,我試圖做一些連鎖店這樣的:
ajaxCall1.then(
response => ajaxCall2(response)
).then(
response => ajaxCall3(response)
)
我試圖避免使用when
。像往常一樣我(並打賭你也)有1個Ajax調用(用於表單提交),有時2個鏈接ajax調用,例如,如果我需要獲取表的數據,首先查詢總行數,如果計數大於0,另一個數據請求。在這種情況下,我使用:
function getGridData() {
var count;
callForRowsCount().then(
(response) => {
count = response;
if(count > 0) {
return callForData();
} else {
return [];
}
}
).then(response => {
pub.fireEvent({
type: 'grid-data',
count: count,
data: response
})
})
}
pub
lisher觸發事件,我有我的所有組件進行更新。
在一些真的罕見的情況下,我需要使用when
。但這總是糟糕的設計。發生這種情況的時候,當我需要在主要請求之前加載附加數據包,或者當後端不支持批量更新時,我需要發送一堆ajax調用來更新許多數據庫實體。這樣的事情:
var whenArray = [];
if(require1) {
whenArray.push(ajaxCall1);
}
if(require2) {
whenArray.push(ajaxCall2);
}
if(require3) {
whenArray.push(ajaxCall3);
}
$.when.apply($, whenArray).then(() => loadMyData(arguments));
我通常將我的數據分割成數組塊。然後,發送第一個塊(索引爲0),並移動到'$ .ajax'的'complete'事件的下一個塊(索引)。在你的場景中,你可能想看看['.when'](https://api.jquery.com/jquery)。當/) –
如果你不得不依靠先前的ajax調用的輸出來進行下一個ajax調用,那麼我認爲$ .when可能沒有幫助。如果你總是有這一系列的ajax調用,那麼我們是否可以將所有邏輯都包含在單個服務中以避免往返? – Developer