2014-09-30 4 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: Can not read property» then «undefined» – nofear87

+0

Ups ... это была проблема возврата ... я забыл первое возвращение! – nofear87

Смежные вопросы