AS2 Ожидание возврата

Я работаю над проектом AS2. В настоящее время у меня есть функция, которая ссылается на некоторые пакеты PHP. По сути, пакет отправляется, а затем возвращает некоторую информацию на основе аргумента. Просто, правда.

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

function handleReturnNicknameById(id)
{
    nFunctionComplete = 0;
    trace("api : handleGetSwidById");
    AIRTOWER.send(AIRTOWER.PLAY_EXT, "friends#getPlayerInfoById", [id], "str", SHELL.getCurrentServerRoomId());
    AIRTOWER.addListener('getPlayerInfoById', handleReturnNickname);
    while(nFunctionComplete < 700)
    {
        if(nickReady == true)
        {
            nFunctionComplete = 701;
            return(nickToReturn);
        }
        nFunctionComplete++;
    }
}
function handleReturnNickname(obj)
{
    AIRTOWER.removeListener('getPlayerInfoById', handleReturnNickname);
    obj.shift();
    nickToReturn = obj[1];
    nickReady = true;
}

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

В конечном итоге возникает вопрос: можно ли в AS2 заставить функцию «ждать» перед возвратом?


person user3727938    schedule 05.07.2015    source источник


Ответы (1)


Чтобы сделать то, что вы ищете, вы можете использовать функция обратного вызова, которая будет вызываться при загрузке ваших данных. Итак, ваш код будет таким:

function handleReturnNicknameById(id:Number, callback:Function): Void
{
    AIRTOWER.send(AIRTOWER.PLAY_EXT, "friends#getPlayerInfoById", [id], "str", SHELL.getCurrentServerRoomId());
    AIRTOWER.addListener('getPlayerInfoById', handleReturnNickname);

    function handleReturnNickname(obj): Void
    {
        AIRTOWER.removeListener('getPlayerInfoById', handleReturnNickname);
        obj.shift();
        var nickToReturn = obj[1];

        // run the callback function and pass the needed data
        callback(nickToReturn);
    }

}

// this function is called only when data is loaded
function my_callback(data): Void 
{
    // here you can use your data
    trace('loaded data : ' + data);
}

И выполнить все это:

handleReturnNicknameById(id, my_callback);

Надеюсь, что это может помочь.

person akmozo    schedule 06.07.2015