如何处理来自$ http.get的多个错误

时间:2015-11-06 22:06:10

标签: javascript arrays angularjs

我通过动态构建网址来发出多个GET请求。

对于任何错误,我想获取response.config.url的值,处理它,并将结果值推送到对象中。

当我只收到一个错误时,下面的代码工作正常。

如果返回多个错误,则只将最后一个错误的值推入对象。我想这是因为它会覆盖之前的那个。

我该如何预防?当有多个错误时,如何确保所有值都被推入对象?

(注意:annotation是我从输入字段获得的字符串数组; _是lodash)

function checkVariants(annotation) {
    var lemmas = annotation.text.split(' ');
    var results = [];
    var words = [];
    for (var i = 0; i < lemmas.length; ++i) {
        var urlLemmas = encodeURIComponent(lemmas[i]).toLowerCase();
        results.push(urlLemmas);
        $http({
            method: 'GET',
            url: 'https://xxxxxxx.org/variants/' + results[i] + '.txt'
        }).then(function successCallback(response) {
            console.log('Success: ', response.status)
        }, function errorCallback(response) {
            var url = response.config.url;
            words = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));
            _.extend(annotation, {
                variants: words
            });
        })
    }
}

2 个答案:

答案 0 :(得分:2)

将您的variants媒体资源添加为数组并将words添加到其中:

$http({
    method: 'GET',
    url: 'https://wwwcoolservice.org/variants/' + results[i] + '.txt'
}).then(function successCallback(response) {
    console.log('Success: ', response.status)
}, function errorCallback(response) {
    var url = response.config.url;
    words = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));                
    if (!annotation.variants || !annotation.variants.length) { // First error: create the array
        annotation.variants = [words];
    } else { // next errors: add to the array
        annotation.variants.push(words);
    }
});

使用此解决方案,您需要检测您是否已经拥有variants属性,因此在调用_.extend时会有更多附加价值。

答案 1 :(得分:0)

我设法得到我想要的东西。

这里的代码仅供参考:

function checkVariants(annotation) {
        var lemmas = annotation.text.split(' ');
        var results = [];
        var oedVars = [];
        for (var i = 0; i < lemmas.length; ++i) {
            var urlLemmas = encodeURIComponent(lemmas[i]).toLowerCase();
            results.push(urlLemmas);
            $http({
                method: 'GET',
                url: 'https://XXXXXX.org/variants/' + results[i] + '.txt'
            }).then(function successCallback(response) {
                console.log('Success: ', response.status)
            }, function errorCallback(response) {
                var url = response.config.url;
                var words = url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf("."));
                oedVars.push(words);
                _.extend(annotation, {
                    variants: oedVars
                });
            })
        }
    }