Как правильно связать вызовы сервисов в AngularJS?

Мне нужно вызвать конечную точку службы Restful, чтобы получить идентификатор, и как только я получу результат, я должен вызвать вторую конечную точку службы Restful через службу angularjs. Первый вызов возвращает идентификатор клиента, с этим идентификатором клиента мне нужно искать дополнительную информацию об этом клиенте.

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

someService.someAction().then( function(data){
   var id = data.data;
   antoherCallToAnotherService.someOtherAction(id).then(function(data2){
         //do some stuff
   );
 );

Спасибо


person blackjack    schedule 30.01.2016    source источник


Ответы (1)


Это довольно типичный подход. Однако вы можете оптимизировать его, объединив несколько обещаний:

someService.someAction().then(function(response) {
    var id = response.data;
    return antoherCallToAnotherService.someOtherAction(id);
})
.then(function(data2) {
    // data is available
});

Это не так уж и плохо, но при желании можно сделать еще больше. Вероятно, вам не следует разрешать первое обещание со всем объектом response, базовая служба должна разрешать фактические (возможно, обработанные данные). Тогда ваш код может стать:

someService.someAction()
.then(antoherCallToAnotherService.someOtherAction)
.then(function(data) {
    // data is available
});

Чтобы вышеизложенное работало, someService.someAction должно разрешаться с response.data (в вашем случае это id).

person dfsq    schedule 30.01.2016