2017-01-30 3 views
1

У меня директиву под названием, как machineForm, который имеет dataServiceПараллельные получать запросы - Угловая JS

dataService.getMachineTaxesById($scope.machineId).then(function (response) { 
    $scope.machine.machineTaxes = response.data; 
}); 

Я звоню эту директиву в два раза, в то время.

<div class="modal-compare-item"> 
    <machine-form app-data="appData" 
     index="analyzie_index" 
     machine-id="machineAnalyze.id" 
     machine="machineAnalyze" 
     action="'edit'"> 
    </machine-form> 
</div> 
<div class="modal-compare-item"> 
    <machine-form app-data="appData" 
     index="compare_index" 
     machine-id="machineCompare.id" 
     machine="machineCompare" 
     action="'edit'"> 
    </machine-form> 
</div> 

dataService для getMachineTaxesById здесь:

// Get Machine Taxes By Id 
this.getMachineTaxesById = function(machine_id) {   
    return $http({ 
     method: 'GET', 
     url: 'https:xyz/api/MachineTaxes/Machine/'+ machine_id, 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
      'Authorization' : $cookies.get('token_type') + " " + $cookies.get('access_token') 
     } 
    }); 
}; 

Он отлично работает, если я комментировать любую из <machine-form>, но не тогда, когда оба называют в то время. Я получаю response{"message":"Authorization has been denied for this request."}

Это связано с отправкой параллельного запроса за раз? Должен ли я ждать завершения одного запроса перед отправкой другого.

Примечание: я использую токен доступа для каждого запроса.

+0

Посмотрите в * Сети * консоли вашего браузера. Найдите запрос с ошибкой и проверьте заголовок запроса «Авторизация». Правильно ли он установлен? Когда устанавливаются эти значения cookie ('token_type' и' access_token')? – Phil

+1

Нет проблемы с точки зрения углов, выполняющей несколько параллельных запросов. Ограничивает ли ваша конечная точка одновременные соединения для определенного токена или, возможно, одноточечные токены? – Brian

+0

@Brian Есть другие запросы, которые успешны. Только когда я пытаюсь ударить один и тот же URL-адрес API несколько раз, он отвечает '{" message ":" Авторизация была отклонена для этого запроса. "}' –

ответ

3

Чтобы служба выполнить XHR следует последовательно сохранить обещание от предыдущего вызова и цепочек из него:

app.service("dataService", function($http) { 
    var lastPromise; 
    // Get Machine Taxes By Id 
    this.getMachineTaxesById = function(machine_id) { 
     var config = { 
       method: 'GET', 
       url: 'https:xyz/api/MachineTaxes/Machine/'+ machine_id, 
       headers: { 
        'Accept': 'application/json', 
        'Content-Type': 'application/json', 
        'Authorization': 
          $cookies.get('token_type') + " " + $cookies.get('access_token') 
       }; 
     if (!lastPromise) {   
      lastPromise = $http(config); 
     } else { 
      lastPromise = lastPromise.catch(function (errorResponse) { 
       //convert rejected promise to success 
       return errorResponse; 
      }).then(function(response) { 
       //return httpPromise to chain 
       return $http(config); 
      }); 
     }; 
     return lastPromise;  
    }; 
}); 
Смежные вопросы