asynchrone WS-Aufrufe und await () außerhalb eines Controllers

8

Gibt es eine Möglichkeit, den awarn () -Mechanismus außerhalb eines Controllers zu verwenden?

Ich möchte keinen Code haben, der den asynchronen Aufruf im Controller ausführt, sondern diesen Code in einer Serviceklasse, die von mehreren Controllern wiederverwendet werden kann, aber seit dieser Methode gibt es keine Möglichkeit, außerhalb eines Controllers aufzurufen ist geschützt.

Also zum Beispiel in der Steuerung:

%Vor%

Und die Serviceklasse:

%Vor%

Gibt es eine Möglichkeit, so etwas zu erreichen?

Danke für Ihre Hilfe.

Bearbeiten : Ich habe Pere's Rat befolgt und die Service-Klasse dazu gebracht, den Controller zu implementieren, es funktioniert jedoch, es ist notwendig, dass der Controller, der es verwendet, verbessert wird. Der einzige Weg, wie ich herausgefunden habe, dass dies erledigt wird, ist mindestens einmal die Methode wait () in der Klasse des aufrufenden Controllers aufzurufen.

Ich habe jedoch immer noch nicht verifiziert, dass der Code tatsächlich gesperrt ist.

Edit 2: Ein Vorschlag, den ich von der Google-Gruppe bekommen habe, ist, dass ich wirklich versuchen sollte, das Warten im Controller zu machen, also wäre vielleicht eine bessere Lösung der Service zur Rückgabe eines Versprechen Sie und lassen Sie den Controller darauf warten, aber dann es gibt keinen Weg für mich Todo das ist da?

Also zum Beispiel in der Steuerung:

%Vor%

Und die Serviceklasse:

%Vor%

}

    
Dan Serfaty 14.12.2011, 20:27
quelle

3 Antworten

3

Bisher ist dies der beste Ansatz, den ich gefunden habe, denke ich, es sei denn, es gibt ein Problem mit der Verwaltung separater Thread-Pools in der Play-Instanz.

Ich habe ein Beispiel dafür genommen, was Play in WSAsync.WSAsyncRequest macht Klasse und das scheint zu funktionieren.

Im Wesentlichen wird das Warten auf den Controller ausgeführt, aber die Serviceklasse gibt eine Promise des Objekts zurück, von dem ich erwartete, dass der Service zurückgegeben wird. Das ist in Ordnung, da ich die Einzelheiten darüber, wie dieses Objekt abgerufen wurde, nicht kenne Ebene.

In der Steuerung:

%Vor%

Und die Serviceklasse:

%Vor%

So scheint das mein Problem jetzt zu lösen.

Danke allen.

    
Dan Serfaty 17.12.2011, 00:42
quelle
1

Wie Sie erwähnt haben erwarten ist nur von einem Controller aus zugänglich.

Machen Sie die Service-Klasse dazu, den Controller zu erweitern, erstellen Sie eine Reihe von geschützten Support-Methoden und verwenden Sie sie als übergeordnete Klasse für die Controller.

Auf diese Weise können Sie die Implementierung auf allen Controllern freigeben und gleichzeitig auf alle Controller-Methoden zugreifen (warten, rendern usw.).

    
Pere Villega 15.12.2011 10:49
quelle
1

Dies ist wahrscheinlich zu spät, um Ihnen zu helfen :), aber die Methode ist, die Promise.onRedeem () -Methode zu verwenden, um ein neues Versprechen aufzurufen, das im Controller zurückgegeben und erwartet wird ...

%Vor%     
tazmaniax 15.01.2017 10:42
quelle

Tags und Links