Сработало. Спасибо!
Асинхронная функция не завершается если не объявлена переменная.
-
Ситуация: вызываю асинхронную функцию, забыл передать в нее переменную, но в функции есть проверка if эта переменная чего то там.
Так вот функция зависает навечно. А должна вывалится с ошибкой.
Потратил пару часов чтоб понять в чем дело ... Надо починить. -
@DuckDuck said in Асинхронная функция не завершается если не объявлена переменная.:
Надо починить.
Можете приложить тестовый скрипт, демонстрирующий проблему?
-
@Fox у меня вызов из веб интерфейса по кнопке сделан так
$(".RestartScript").click(async function() { var restarting = await Api.RunFunction("the_end",{}) Api.Restart() });функция the_end Идет условие
If [[переменная]] == "чего то там"Переменная не создавалась в самой функции, ну и соответственно не передана.
И вот в такой ситуации - просто подвисает этот вызов, ни едет дальше и не вываливается с ошибкой.
Когда переменную создал внутри этой функции - все заработало. Но почему не вывалилось то с ошибкой ... Долго понять не мог в чем беда ....
-
@DuckDuck said in Асинхронная функция не завершается если не объявлена переменная.:
@Fox у меня вызов из веб интерфейса по кнопке сделан так
$(".RestartScript").click(async function() { var restarting = await Api.RunFunction("the_end",{}) Api.Restart() });функция the_end Идет условие
If [[переменная]] == "чего то там"Переменная не создавалась в самой функции, ну и соответственно не передана.
И вот в такой ситуации - просто подвисает этот вызов, ни едет дальше и не вываливается с ошибкой.
Когда переменную создавл внутри этой функции - все заработало. Но почему не вывалилось то с ошибкой ... Долго понять не мог.
Если функция BAS возвращает ошибку, то и вызов функции из веб интерфейса тоже возвращает ошибку: https://wiki.bablosoft.com/web-interface/#/callbasfunction?id=handling-errors
Приложите код вашей функции "the_end", что бы я мог повторить проблему
-
ну ошибку то специально в веб интерфейсе я не ловил, может поэтому и не понял что происходит. Да как то об этом я и не подумал, что в веб интерфейсе отдельно ловить надо ...
Обычно то все ошибки и так сыпятся в лог ... -
@DuckDuck said in Асинхронная функция не завершается если не объявлена переменная.:
ну ошибку то специально в веб интерфейсе я не ловил, может поэтому и не понял что происходит. Да как то об этом я и не подумал, что в веб интерфейсе отдельно ловить надо ...
Обычно то все ошибки и так сыпятся в лог ...В вашем коде вызова вы ожидаете получить результат, однако в функции вы ни какой результат не возвращаете (нет действия "Return"). Я на пустом интерфейсе добавил ваш код вызова вашей функции:
$("#Start").click(async function(){ Log("Starting task") var restarting = await Api.RunFunction("the_end",{}) Api.Restart() Log("Result: '" + Result + "'") Log("Task completed") })И вызов сработал корректно вернув ошибку

-
результата я не жду - мне просто надо было чтоб отработала функция, я добавлял логи на всех стадиях, до вызова if и после. Лог после ифа уже не выводится но и Api.Restart() не срабатывал. И поток не завершался, как обычно.
Да, я понял куда смотреть, спасибо.