如何使用AngularJs $ resource promises处理服务器响应

时间:2014-01-02 08:27:59

标签: javascript angularjs

我开始学习AngularJs。

使用AngularJs,我有以下名为“datacontext”的工厂,该工厂公开了一个获取具有特定id的人员资源的函数:

function datacontext($resource, common) {
    var $q = common.$q;
    var People = $resource('/api/people/:id', { id: '@id' });

    var service = {
        getPerson: getPerson
    };

    return service;

    function getPerson(id) {
        var p = People.get({ id: id });

        return $q.when(p);
    }
}

在我的控制器内部,我按如下方式使用它:

function getPerson(id) {
    return datacontext.getPerson(id).then(onSuccess, onError);

}
function onSuccess(data) {

    return vm.person = data;
}
function onError(data) {
    alert("A");
}

我的服务通过返回特定id的正确资源来工作,如果找不到,则返回404找不到的资源。

在上面的代码块中,即使有404响应,它似乎总是调用onSuccess回调。

我做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

为什么不使用$ q服务进行承诺?怎么样:

    function getPerson(id) {
        var defer = $q.defer();
        People.get({ id: id }, function() {   
             //success
        },
        function(){
            //fail
        });
        return defer.promise;
}

不要忘记为您的服务注入$ q