2017-01-30 5 views
1

Ich habe eine Richtlinie als machineForm genannt, die eine dataServiceParallel-Get-Requests - Angular JS

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

diese Anweisung Ich rufe zu einer Zeit zweimal hat.

<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> 

Die dataService für getMachineTaxesById ist hier:

// 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') 
     } 
    }); 
}; 

Es funktioniert gut, wenn ich irgendeine der <machine-form> kommentieren, aber nicht, wenn beide zu einem Zeitpunkt aufgerufen werden. Ich bekomme eine response Sprichwort {"message":"Authorization has been denied for this request."}

Ist es etwas damit zu tun, parallele Anfrage auf einmal zu senden? Sollte ich warten, bis eine Anfrage abgeschlossen ist, bevor ich eine andere gesendet habe.

Hinweis: Ich verwende Zugriffstoken für jede Anfrage.

+0

Blick in * Netzwerk * ​​Konsole Ihres Browsers. Suchen Sie nach der fehlgeschlagenen Anforderung, und überprüfen Sie den Header der Kopfzeile "Authorization". Ist es richtig eingestellt? Wann werden diese Cookie-Werte gesetzt ('token_type' und' access_token')? – Phil

+1

Es gibt kein Problem aus der Sicht von Angulars, bei dem mehrere gleichzeitige Anforderungen ausgeführt werden. Begrenzt der Endpunkt gleichzeitige Verbindungen für ein bestimmtes Token oder werden die Tokens möglicherweise nur einmal verwendet? – Brian

+0

@Brian Es gibt andere Anfragen, die erfolgreich sind. Nur wenn ich versuche, die gleiche API URL mehrmals zu treffen, antwortet es mit '{" Nachricht ":" Autorisierung wurde für diese Anfrage abgelehnt. "} –

Antwort

3

der Dienst haben, die XHRs ausführen sequentiell, von ihm das Versprechen aus dem vorherigen Aufruf und Kette sparen:

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;  
    }; 
});