2014-09-30 87 views
0

当我和我用下面的方式asynchron数据工作:有更好更短的方式来处理异步数据吗?

服务:

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

基本上,我也是这么做的,但看起来你正在创造一个多余的承诺。 这应该工作,我也认为:

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

我不明白你为什么会想解包和重新包装的诺言?

其中一个原因是,如果你需要返回之前转换从APIService返回的数据,但即使如此,你可以使用隐含的承诺链接:

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

自动调用然后创建一个承诺,那angularjs自动解析与返回的值。

+0

谢谢!当我使用你的代码...我从我的控制器得到了以下错误:“TypeError:无法读取属性'然后'未定义” – nofear87 2014-09-30 14:08:00

+0

Ups ...这是一个回报问题...我忘了第一个回报! – nofear87 2014-09-30 14:09:58

相关问题