javascript – 使用jQuery Deferred查找第一个可用的数据源

前端之家收集整理的这篇文章主要介绍了javascript – 使用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");});

忽略我真的不认为什么时候接受一个数组(也许它).这当然会让它等到它们全部完成.我正在寻找一些代码,让它等到一个,其中任何一个完成,然后不用担心其他的.

我被告知它只能递归地工作.

最佳答案
这不使用递归,但符合​​从多个数据源获取的要求,只关心返回成功响应的第一个.

http://jsfiddle.net/mNJ6D/

function raceToIt(urls) {
    var deferred = $.Deferred(),promises;

    function anyComplete(data) {
        if (!deferred.isResolved()) {
            deferred.resolveWith(this,[data]);
            promises.forEach(function(promise) {
                promise.abort();
            });
        }
    }
    promises = urls.map(function(url) {
        return $.getJSON(url).then(anyComplete);
    });
    return deferred.promise();
}
raceToIt(["/echo/json/","/echo/json/","/echo/json/"]).then(function(data) {
    console.log(data);
});​

猜你在找的jQuery相关文章