是否有更好更短的方法来处理异步数据?

时间:2014-09-30 13:45:26

标签: angularjs

当我使用异步数据时,我使用以下方法:

服务:

app.service("DashboardService", function( $resource, $q, APIService ) {

    return {
        getLatestDevices: getLatestDevices,
    }

    function getLatestDevices() {
        var d = $q.defer()
        APIService.query({route: 'devices'}).$promise.then(function(data) {
           d.resolve(data)
        })
        return d.promise
    }
}

控制器:

app.controller("DashboardCtrl", function( $scope, DashboardService ) {

    DashboardService.getLatestDevices().then(function(data){
        $scope.latestDevices = data
    })

})

有更好或更短的方法吗?或者我是以正确的方式做到的? 谢谢!

1 个答案:

答案 0 :(得分:1)

基本上这也是我所做的,但看起来你正在创造一个多余的承诺。 这也应该有用,我想:

function getLatestDevices() {
    return APIService.query({route: 'devices'}).$promise;
}

我不明白你为什么要打开包装并重新包装那个承诺?!

一个原因是如果你需要在返回之前转换从APIService返回的数据,但即使这样你也可以使用隐式的promise链接:

function getLatestDevices() {
    return APIService.query({route: 'devices'}).$promise.then(function (data) {
       return someTransformFn(data);
    });
}

然后调用会自动创建一个promise,angularjs会自动使用返回的值解析。