Я хотел бы вернуть true или false в зависимости от того, есть данные в таблице настроек или нет
Вы не можете.Не известно, есть ли данные в таблице настроек в то время, когда должен возвращаться метод setupRequired()
.Это будет известно только тогда, когда база данных SQL выполнила запрос и запустила функцию обратного вызова.Это происходит только после того, как setupRequired()
и все функции, которые привели к его вызову, вышли, вернув управление браузеру.
В этом весь смысл функции обратного вызова, передаваемой executeSql()
.Функция не выполняется сразу, поэтому к моменту достижения return status
прикосновение к status
не будет затронуто.Более того, любые исключения, возникающие внутри функций обратного вызова, не приведут к выполнению блока catch(e)
, потому что блок try...catch
будет долго завершен к моменту фактического вызова функции, которая была определена внутри него.Так что это try...catch
фактически бесполезно.
Это «асинхронное» кодирование.То, что какой-то код находится ниже функции, не означает, что функция будет выполняться первой.