Javascript 对数据执行一系列查询,允许出现故障

Javascript 对数据执行一系列查询,允许出现故障,javascript,error-handling,Javascript,Error Handling,我有一些数据需要查询以找到最佳匹配。所以我在一个函数中有这个函数,它被传递el(数据) 使用|运算符的问题在于,如果任何一个查询导致错误,操作将退出,并且之后的任何查询都不会匹配。例如,第二个查询可能会失败,因为如果未找到值,则在未定义的上将没有匹配方法 我目前已将此函数调用包装在try语句中以捕获这些错误,但这并不能解决我的问题。我需要捕获每个查询的错误,或者其他一些错误,以允许运行其余的查询 我正在寻找一个优雅的解决方案来对这些数据运行一组查询。要匹配的第一个查询应该是返回值。这样好吗?必须

我有一些数据需要查询以找到最佳匹配。所以我在一个函数中有这个函数,它被传递
el
(数据)

使用
|
运算符的问题在于,如果任何一个查询导致错误,操作将退出,并且之后的任何查询都不会匹配。例如,第二个查询可能会失败,因为如果未找到值,则在
未定义的
上将没有
匹配
方法

我目前已将此函数调用包装在
try
语句中以捕获这些错误,但这并不能解决我的问题。我需要捕获每个查询的错误,或者其他一些错误,以允许运行其余的查询


我正在寻找一个优雅的解决方案来对这些数据运行一组查询。要匹配的第一个查询应该是返回值。

这样好吗?必须检查返回值和所有

参见JSFIDLE:

编辑:让它与jQuery一起工作

var queries = [
    function(el){return el.find('link:regex(type,application\\/(atom|rss)\\+xml)').attr('href')},
    function(el){return el.find('meta[name="msapplication-task"]').attr('content').match(/action-uri=(.*?);/)[1]}
];
function match(el) {
    var l = queries.length,
        m = false; // match
    while(-1 < --l && !m){
        try{
            m = queries[i](el);
        } catch(err) {
            alert(err);
            // handle
        }
    }
    return m;
}

var el = document.createElement("meta");
el.setAttribute('name','msapplication-task');
el.setAttribute('content','action-uri="one";action-uri="two";');

alert(match($('<div/>').append(el)));
var查询=[
函数(el){return el.find('link:regex(type,application\\/(atom | rss)\\+xml')).attr('href'),
函数(el){return el.find('meta[name=“msapplication task”]').attr('content').match(/action uri=(.*);/)[1]}
];
功能匹配(el){
var l=querys.length,
m=false;//匹配
而(-1<--l&&!m){
试一试{
m=查询[i](el);
}捕捉(错误){
警惕(err);
//处理
}
}
返回m;
}
var el=document.createElement(“元”);
el.setAttribute('name','msapplication-task');
el.setAttribute('content','action-uri=“一个”action-uri=“两个”);
警报(匹配($('')。追加(el));
编辑:向前循环(小提琴:)

功能匹配(el){
var l=querys.length,
i=-1,
m=false;//匹配
而(++i
这看起来很有希望。干杯问题是它会向后执行查询。有没有办法让它继续下去?
var queries = [
    function(el){return el.find('link:regex(type,application\\/(atom|rss)\\+xml)').attr('href')},
    function(el){return el.find('meta[name="msapplication-task"]').attr('content').match(/action-uri=(.*?);/)[1]}
];
function match(el) {
    var l = queries.length,
        m = false; // match
    while(-1 < --l && !m){
        try{
            m = queries[i](el);
        } catch(err) {
            alert(err);
            // handle
        }
    }
    return m;
}

var el = document.createElement("meta");
el.setAttribute('name','msapplication-task');
el.setAttribute('content','action-uri="one";action-uri="two";');

alert(match($('<div/>').append(el)));
function match(el) {
    var l = queries.length,
        i = -1,
        m = false; // match
    while(++i < l && !m){
        try{
            m = queries[l](el);
        } catch(err) {
            alert(err);
            // handle
        }
    }
    return m;
}