Encadeamento de chamada ajax do jQuery com várias dependências
Eu não entendo mágicadiferido objetos com jQuery. Suponha o seguinte código:
function callWebService(uri, filter, callback)
{
var data = {};
if (filter && filter != '')
data['$filter'] = filter;
jQuery.ajax({
url: '/_api/lists/' + uri + '/items',
data: data,
success: callback,
dataType: 'json'
});
}
function getInitialData() {
callWebService("InitialData", "", function (data) {
//do stuff with data
});
}
function getGreenData() {
callWebService("GreenData", "filter from InitialData", function (data) {
//do stuff with data
});
}
function getRedData() {
callWebService("RedData", "filter from InitialData", function (data) {
//do stuff with data
});
}
function getFinalData() {
callWebService("FinalData", "filter from RedData & GreenData", function (data) {
//do stuff with data
});
}
A ordem em que quero fazer as coisas é a seguinte: no final, chamarei quatro serviços da Web, enquanto as chamadas dependem uma da outra (uma longa cadeia):
LigargetInitialData
LigargetGreenData
com dependência degetInitialData
LigargetRedData
com dependência degetInitialData
LigargetFinalData
com dependênciasgetGreenData
egetRedData
Como você pode ver, 2 e 3 podem acontecer simultaneamente. Estou pensando que posso usarjQuery.when()
(ouresolve
?), Simplesmente não sei como aplicá-lo aqui. Eu acho que preciso refazer as funções para sempre retornar o objeto ajax?
O código pseudo ficaria assim:
getInitialData().then(getGreenData, getRedData).then(getFinalData)