Web-Service-Aufrufe sind asynchron im Flex, aber ich wollte einen Web-Service-Aufruf in einer Klasse umschließen, um synchrone Kapselung bereitzustellen. So etwas wie das Folgende: Der Benutzer kann getMyMethodResult aufrufen und das Ergebnis vom Webdienst abrufen. Ich erwartete, dass der Thread, der die Soap-Antwort erhalten hatte, die Variable _result bevölkern würde und dass getMyMethod nach einiger Zeit feststellen würde, dass _result nicht länger null ist. Aber das tut es nicht! Kann mir jemand erklären, warum das nicht funktioniert?Programmierung von synchronen Web-Service-Aufrufen in Flex
public class myClass
{
private var _result:Object;
public function myClass()
{
//create a web service object
...
// Add listener
_service.addMyMethodListener(myMethodListener);
}
public function getMyMethodResult()
{
_service.myMethod();
while (_result == null)
{
// count a variable or something (unimportant)
}
return _result;
}
private function myMethodListener(event:Event):void
{
_result = event.result;
}
}
Danke für Ihre Antwort. Ich verstehe immer noch nicht; Ich dachte, sie würden in verschiedenen Threads laufen? Wie behandelt der Flash-Player die asynchrone Rückgabe, wenn nicht von einem anderen Thread? Wenn die Ereignisschleife alles verarbeitet, können Sie die Ausführungsreihenfolge dieser Aufgaben erklären? Danke –
BTW, ich bin glücklich, "die Idee" fallen zu lassen, ich habe mich nur gewundert, warum es nicht funktioniert hat, damit ich besser verstehen konnte, wie der Flash Player/Flex funktioniert. Ich bin neu im Flex! –
Der Flash-Player wird Ihre Codeausführung nicht unterbrechen, wenn er ein solches Ereignis empfängt. Es wird bis zum nächsten Frame warten, wenn ich mich nicht irre. Die Hintergrundimplementierung des Players verwendet wahrscheinlich einen Thread, um dies zu tun, stellt jedoch die Ereignisse in eine Warteschlange, so dass das ActionScript nur für einen Thread ausgeführt wird. – sharvey