当我使用异步数据时,我使用以下方法:
服务:
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
})
})
有更好或更短的方法吗?或者我是以正确的方式做到的? 谢谢!
答案 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会自动使用返回的值解析。