Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как вернуть значение из события? (http://www.flasher.ru/forum/showthread.php?t=211790)

EndoCrinologist 07.11.2015 14:04

Как вернуть значение из события?
 
Есть вот такая корявая функция отправки/получения данных с сервера.
Код AS3:

function senderData(id:Number, param:String, script:String):Boolean
{
        var sendLoader:URLLoader = new URLLoader();
        var sendRequest:URLRequest = new URLRequest('mydomen'+script+'.php' + '?' + Math.random());
        sendRequest.method = URLRequestMethod.POST;
        var sendVars :URLVariables = new URLVariables();
        sendVars['id'] = id;
        sendVars['param'] = param;
        sendRequest.data = sendVars;
        sendLoader.load(sendRequest);
        var resulter:Boolean = false;
        sendLoader.addEventListener(Event.COMPLETE, function(e:Event)
        {
                if (sendLoader.data == "ok")
                {
                        resulter = true;
                }
        });
        return resulter;
}

Но я так понимаю, она всегда возвращает false из предустановки. Как мне вернуть значение "наружу" изнутри события только после того, как оно произойдет?

Добавлено через 29 минут
Разобрался. Создал новый event и добавил слушателя на него.

exsites 07.11.2015 14:34

наверное так:
Код AS1/AS2:

function senderData(id:Number, param:String, script:String):Boolean
{
        var sendLoader:URLLoader = new URLLoader();
        var sendRequest:URLRequest = new URLRequest('mydomen'+script+'.php' + '?' + Math.random());
        sendRequest.method = URLRequestMethod.POST;
        var sendVars :URLVariables = new URLVariables();
        sendVars['id'] = id;
        sendVars['param'] = param;
        sendRequest.data = sendVars;
        sendLoader.load(sendRequest);
        var resulter:Boolean = false;
        sendLoader.addEventListener(Event.COMPLETE, function(e:Event)
        {
                if (sendLoader.data == "ok")
                {
                        resulter = true;
Poluchi();
                }
        });
        return resulter;
}
 
 
function Poluchi(){
trace(resulter);
}


EndoCrinologist 07.11.2015 14:41

Он будет ругаться на эту строку, типа, "функция не возвращает значение". Уже пробовал
Код AS3:

sendLoader.addEventListener(Event.COMPLETE, function(e:Event)

dispatchEvent очень хорошо тут помог

undefined 07.11.2015 15:01

1)Нет решительно никакого смысла что-то возвращать из обработчика события, т.к. тому, кто его вызывает по барабану на то, что обработчик там возвращает.Точнее возврат значения имеет смысл только если функция-обработчик используется для чего-то еще помимо обработки события.
2)Использование анонимной функции в качестве обработчика и несохранение ссылки на нее(на функцию), делает невозможным потом отписаться от этого события и как следствие приводит к тому, что объект sendLoader не будет удален сборщиком мусора, что есть утечка памяти.

caseyryan 07.11.2015 15:19

Цитата:

делает невозможным потом отписаться от этого события и как следствие приводит к тому, что объект sendLoader не будет удален сборщиком мусора, что есть утечка памяти.
А так?
Код AS3:

event.target.removeEventListener(event.type, arguments.callee);


undefined 07.11.2015 16:00

Можно конечно, но это извращение.А что если объект-диспетчер является частью пула и подразумевает повторное использование?

caseyryan 07.11.2015 16:30

Цитата:

А что если объект-диспетчер является частью пула и подразумевает повторное использование?
Ну а как это противоречит такой концепции? Отписались от слушателя, когда надо дернули диспетчер из пула, и снова подписались

undefined 07.11.2015 16:44

а если событие, где происходит отписка, еще не наступило?

caseyryan 07.11.2015 16:50

Цитата:

Сообщение от undefined (Сообщение 1188793)
а если событие, где происходит отписка, еще не наступило?

Как оно может не наступить, если отписка происходит по событию в обработчике? Oo

EndoCrinologist 07.11.2015 18:05

Суть в том, что настройка звука в приложении синхронизирована с сервером. При нажатии на кнопку на сервер отправляется запрос через выше указанную функцию. Мне нужно как-то обработать ответ. return'ы не помогали, поэтому, решил диспатчить события


Часовой пояс GMT +4, время: 03:52.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.