Отслеживание Angular JS между действием $ resource и возвратом $ prom

У меня есть сетка из различных ячеек, куда пользователи могут перетаскивать изображения. При перетаскивании в сетку выполняется вызов действия $ resource, и приложение обновляется.

Я хочу добиться, чтобы в каждой ячейке был загрузчик, когда активен вызов обновления. Например, пользователь бросает элемент в ячейку, и отображается вращающийся загрузчик. После возврата вызова загрузчик удаляется из ячейки и ячейка обновляется.

Все ячейки запускают один и тот же вызов, но данные, передаваемые вызову, различны. Моя проблема в том, как отследить ячейку, на которую отображается возврат. Используя эту функцию, пользователи могут загружать несколько ячеек одновременно. Конечно, если все работает нормально, результаты вызова могут вернуть местоположение ячейки, и это можно использовать для удаления загрузчика. Например, элемент удаляется, выполняется вызов, вызов возвращает данные, которые включают местоположение ячейки, затем JS использует данные местоположения ячейки, чтобы удалить загрузчик и обновить ячейку.

Моя проблема в том, что произойдет, если он полностью выйдет из строя (по какой-либо причине). Как приложение узнает, из какой ячейки удалить загрузчик. EG В ячейку бросается элемент, и выполняется звонок. В ячейке отображается загрузчик, и приложение ожидает возврата. Допустим, возврат никогда не приходит или возврат завершается с ошибками. Как узнать, к какой ячейке принадлежит сбойный вызов?

Я ищу способ указать данные в вызове $ resource, к которым можно получить доступ в ответе на обещание. НАПРИМЕР

rest = $resource('www.api-source.com/layout/34/cells','post',{cell_locaiton:'2x4'},{'post': {method:'GET', isArray: false}});
rest.setTracker('2x5');
rest.post( );     

rest.$promise.then(function(data) {
    $scope.removeLoader(data.cell_data.location);
},function(data, status, headers, config) {
   cell = rest.getTracker( );
   $scope.removeLoader(cell);
}

Где значение устанавливается в ресурсе $, а затем извлекается из обещания $. Я не говорю, что это лучший способ сделать это. Я просто хочу иметь возможность удалить загрузчик, если данные о местоположении ячейки не возвращаются.


person Shane    schedule 17.09.2015    source источник


Ответы (1)


Я не уверен, почему я не видел этого раньше, но это было решено с помощью обратного вызова $ prom.finally (). Это смогло взять нужные мне данные и использовать их, чтобы очистить загрузчик независимо от того, произошел сбой вызова или нет.

cell = '2x4';
rest = $resource('www.api-source.com/layout/34/cells','post',{cell_locaiton:cell},{'post': {method:'GET', isArray: false}}).post( );     

rest.$promise.then(function(data) {
    $scope.removeLoader(cell);
},function(data, status, headers, config) {
   $scope.throwError('Fail');       
}).finally(function(){
   $scope.removeLoader(cell); 
});
person Shane    schedule 21.09.2015