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

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

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

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

Спасибо

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 в твоем случае).

Другие вопросы по тегам