So I was asked this at an interview, but it brought up a good use case. Assume that you have a bunch of data sources. You want to find the first available one and process it and ignore the rest.
So something like:
var datasources = new Array("somedatabase1/pizza","somedatabase2/beer","somedatabase3/llama");
var dfds = new Array();
$.each(datasources,function(source){
dfds.push($.getJSON(source));
});
$.when(dfds).done(function(){alert("they are all done");});
Ignore that I really don't think when accepts an array (maybe it does). This of course would make it wait till they are all completed. I am looking for some code that would make it wait until one, any of them is done, and then not worry about the others.
I was informed that it would only work recursively.
This doesn't use recursion but fits the requirement to fetch from multiple datasources and only care about the first that returns a successful response.
http://jsfiddle.net/mNJ6D/
I've made a plugin which provides another version of
$.when()
with reversed semantics. It's modified from the actual jQuery implementation of$.when()
so it's exactly the same as the original except that it waits for either the firstresolve
d promise, or all promised to bereject
ed.Just drop this code in right after you load jQuery: