Вы не можете.Ваш обработчик onreadystatechange
вызывается long после того, как функция selectVictim
вернется.
Здесь у вас есть, так сказать, "асинхронные функции" - т.е. функции, которые генерируют свое возвращаемое значениене сразу, а после определенного асинхронного процесса.
Чтобы справиться с этим, необходимо использовать обратный вызов для предоставления возвращаемого значения:
function selectVictim( callback )
{
...
...
request.onreadystatechange = function() {
...
vicArray[vicID] = ...;
callback( vicArray[vicID] );
}
}
Обратите внимание на аргумент callback
.Тот, кто вызывает эту функцию, должен предоставить другую функцию для этого аргумента.Затем обратите внимание, как selectVictim
вызывает обратный вызов, когда возвращаемое значение готово.
Теперь, куда бы вы ни позвонили selectVictim
, вы должны изменить свой код с:
function someFunc()
{
doSomething();
var vic = selectVictim();
domeSomethingElseWithVictim( vic );
}
Кому:
function someFunc()
{
doSomething();
selectVictim( function( vic ) {
domeSomethingElseWithVictim( vic );
} );
}
Достаточно просто?