Возврат из объектов ответчика Flex / ActionScript 3 - PullRequest
0 голосов
/ 12 ноября 2009

Мне нужно вернуть значение из моего объекта Responder. Прямо сейчас у меня есть:

private function pro():int {
    gateway.connect('http://10.0.2.2:5000/gateway');
    var id:int = 0;
    function ret_pr(result:*):int {
       return result
    }
    var responder:Responder = new Responder(ret_pr);
    gateway.call('sx.xj', responder);
    return id
}

По сути, мне нужно знать, как получить возвращаемое значение ret_pr в id или что-либо, что я возвращаю из этой функции. Респондент просто, кажется, ест это. Я не могу использовать публичную переменную где-то еще, потому что она будет выполняться несколько раз одновременно, поэтому мне нужна локальная область.

Ответы [ 2 ]

2 голосов
/ 13 ноября 2009

Вот так я бы написал соединение с сервером AMF, вызвал бы его и сохранил полученное значение. Помните, что результат не будет доступен сразу, поэтому вы настроите респондента так, чтобы он «отвечал» на данные после их возвращения с сервера.

public function init():void
{
    connection = new NetConnection();
    connection.connect('http://10.0.2.2:5000/gateway');
    setSessionID( 1 );
}
public function setSessionID(user_id:String):void
{
    var amfResponder:Responder = new Responder(setSessionIDResult, onFault);
    connection.call("ServerService.setSessionID", amfResponder , user_id);
}

private function setSessionIDResult(result:Object):void {
    id = result.id;
    // here you'd do something to notify that the data has been downloaded. I'll usually 
    // use a custom Event class that just notifies that the data is ready,but I'd store 
    // it here in the class with the AMF call to keep all my data in one place.
}
private function onFault(fault:Object):void {
    trace("AMFPHP error: "+fault);
}

Я надеюсь, что это может указать вам правильное направление.

0 голосов
/ 13 ноября 2009
private function pro():int {
    gateway.connect('http://10.0.2.2:5000/gateway');
    var id:int = 0;
    function ret_pr(result:*):int {
       return result
    }
    var responder:Responder = new Responder(ret_pr);
    gateway.call('sx.xj', responder);
    return id
}

Этот код никогда не даст вам того, что вы хотите. Вам нужно использовать правильную функцию результата. Возвращаемое значение ответчика анонимной функции не будет использоваться окружающей функцией. В этом случае он всегда будет возвращать 0. Здесь вы имеете дело с асинхронным вызовом, и ваша логика должна обрабатывать его соответствующим образом.

private function pro():void {
    gateway.connect('http://10.0.2.2:5000/gateway');
    var responder:Responder = new Responder(handleResponse);
    gateway.call('sx.xj', responder);
} 

private function handleResponse(result:*):void
{
    var event:MyCustomNotificationEvent = new MyCustomNotificationEvent( 
            MyCustomNotificationEvent.RESULTS_RECEIVED, result);
    dispatchEvent(event);
    //a listener responds to this and does work on your result
    //or maybe here you add the result to an array, or some other 
    //mechanism
}

Смысл использования аноновых функций / замыканий не даст вам своего рода псевдосинхронное поведение.

...