Par*_*ris 5 javascript jquery jquery-deferred
所以我在接受采访时被问到这个问题,但它提出了一个很好的用例.假设您有一堆数据源.你想找到第一个可用的并处理它而忽略其余的.
所以类似于:
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");});
Run Code Online (Sandbox Code Playgroud)
忽略我真的不认为什么时候接受一个数组(也许它).这当然会让它等到它们全部完成.我正在寻找一些代码,让它等到一个,其中任何一个完成,然后不用担心其他的.
我被告知它只能递归地工作.
这不使用递归,但满足从多个数据源获取的要求,并且只关心第一个返回成功响应的数据源。
\n\n\n\nfunction raceToIt(urls) {\n var deferred = $.Deferred(),\n promises;\n\n function anyComplete(data) {\n if (!deferred.isResolved()) {\n deferred.resolveWith(this, [data]);\n promises.forEach(function(promise) {\n promise.abort();\n });\n }\n }\n promises = urls.map(function(url) {\n return $.getJSON(url).then(anyComplete);\n });\n return deferred.promise();\n}\nraceToIt(["/echo/json/", "/echo/json/", "/echo/json/"]).then(function(data) {\n console.log(data);\n});\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n