Ваша проблема в том, что ваша задача асинхронная.
favsArr
- временная переменная, и вы возвращаете ее значение сразу после завершения getFavsGamesArray
.В это время значение всегда будет null
, потому что методы прослушивателя вызываются только после завершения оператора SQL, что произойдет в будущем.
Вам нужен какой-то способ отложить все, что вы собираетесь сделать с возвращаемым значением, до его фактического существования.
Лучший способ сделать это - отправить вашесобственного пользовательского события и добавьте значение в качестве поля к объекту события или добавьте метод прослушивателя вне вашего класса SQL непосредственно в SQLStatement
- и пусть он работает с event.target.getResult().data
.Таким образом, вы всегда можете быть уверены, что значение существует, когда происходит обработка, и вы держите свое поведение SQL отделенным от всего внешнего.
Я бы также настоятельно рекомендовал вам не объявлять прослушиватели событий внутри функций, подобных этой: Вы не можете очистить этих слушателей после завершения операторов SQL!
True: объявление функции внутри функции делает ее временной.То есть он существует только для области действия вашей функции, и он собирает мусор, когда он больше не нужен - как временные переменные.Но «это больше не нужно» не применяется, если вы используете его в качестве прослушивателя событий!Единственная причина, по которой это работает, заключается в том, что вы не используете слабые ссылки - если вы это сделаете, функции будут собирать мусор еще до того, как они будут вызваны.Поскольку вы этого не сделаете, слушатели будут выполнять.Но тогда вы не можете удалить их без ссылки!Они продолжают существовать, как и оператор SQL, даже если вы установите для него ссылки null
- и вы успешно создали утечка памяти .Возможно, неплохо, но все же ...
Если вы действительно хотите инкапсулировать свое поведение SQL, это хорошо.Просто рассмотрите возможность перемещения каждого оператора SQL в выделенный класс, вместо создания одного гигантского SQLHelper и объявления ваших методов слушателя как функций-членов - гораздо проще предотвратить утечки памяти и побочные эффекты, если вы сохраняете ссылкико всему, и вы можете использовать их в destroy
методе для очистки должным образом.