2016-07-26 12 views
0

Ich habe eine Fabrik, die ein JavaScript Remoting zu meiner Salesforce-Apex-Klasse macht und Versprechen zurückgibt. Ich rufe mehrere Male gleichzeitig eine Factory-Methode an, die mich für jeden Anruf zurückstellen wird. Aber irgendwie gibt es immer das Ergebnis des ersten Anrufs jedes Mal zurück. Obwohl meine Antwort vom Server innerhalb der Factory-Methode während der Defer.resolve (Antwort) unterschiedlich ist, gibt defer.promise immer dasselbe Ergebnis an den Controller zurück. Ich habe versucht, zu debuggen, konnte aber keinen Erfolg finden. könnte jemand vorschlagen, was ich falsch mache.defer.promise gibt dasselbe Ergebnis für gleichzeitige Aufrufe mit unterschiedlichen Dateneingaben in angularJS zurück

Hier ist meine Factory-Methode:

app.factory('FieldSetFactory', ['$q', '$log', function($q, $log) { 

var fieldSet = {}; 
var defer = $q.defer(); 

fieldSet.getFields = function(scope,fieldSetName, objectName) { 
    this.scope = scope; 
    var self = this; 

    FieldSetController.getFieldSetInfo(fieldSetName,objectName,function(response, event) { 
     if(event.status) { 
      console.log('response =',response); //this prints the actual result returned from server for different calls with different parameters 
      defer.resolve(response);  
     } 
     else { 
      $log.error(event.message); 
      defer.reject(event.message); 
     } 

    }); 

    return defer.promise; 
} 

return fieldSet; 

}]); 

Ich habe meine contoller Namen als fieldSetJsController {! Cid} gehalten where {cid!} Durch jede Komponente eindeutig und übergeben wird, die it.This zu verwenden versucht, ist Um den Controller-Bereich für einzelne Aufrufe zu machen und diese nicht jedes Mal zu überschreiben, übermittelte eine andere Komponente einige Daten.

Dies sind meine Komponenten, die denselben Controller mit unterschiedlichen {! Cid} Werten aufrufen, um sie zu unterscheiden.

<c:FieldSetComponent objectAPIName="Applications__c" 
fieldSet="Application_FieldSet_One" cid="Applications_FieldSet_One" 
       sectionTitle="Section 1" columns="2" textAlign="center"> 
</c:FieldSetComponent> 

<c:FieldSetComponent objectAPIName="Applications__c" 
fieldSet="Application_FieldSet_Second" cid="Applications_FieldSet_Second" 
       sectionTitle="Section 2" columns="2" textAlign="center"> 
</c:FieldSetComponent> 
<c:FieldSetComponent objectAPIName="clcommon__Collateral__c" 
fieldSet="Collateral_FieldSet_One" cid="Collateral_FieldSet_One" 
       sectionTitle="Section 3" columns="2" textAlign="center"> 
</c:FieldSetComponent> 

Antwort

1

Das Problem ist hier:

var defer = $q.defer(); 

Sie Ihre latente Objekt im Konstruktor des Factory-Erzeugung (statt der Schaffung eines neuen jedes Mal die Funktion aufgerufen wird), so dass Ihre App Lösung ist das gleiche Versprechen Objekt immer und immer wieder.

Verschieben Sie var defer = $q.defer() in die Factory-Methode und es sollte ordnungsgemäß funktionieren.

+0

Ich verbrachte Stunden und war dabei verrückt. Danke eine Tonne. Kann Antwort in 1 Minute nicht annehmen :) – Cyclotron3x3