I don't quite understand magic deferred objects with jQuery. Assume the following code:
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
});
}
The order I want to do things is like so - in the end I will call four webservices whereas the calls depend on each other (one long chain):
- Call
getInitialData
- Call
getGreenData
with dependency ongetInitialData
- Call
getRedData
with dependency ongetInitialData
- Call
getFinalData
with dependencies ongetGreenData
andgetRedData
As you can tell 2 & 3 could happen simultaneously. I'm thinking I can use jQuery.when()
(or resolve
?), I just don't know how to apply it here. I think I need to rework the functions to always return the ajax object?
Pseude-code would look like this:
getInitialData().then(getGreenData, getRedData).then(getFinalData)