Асинхронная функция не завершается если не объявлена переменная.

Поддержка
  • Ситуация: вызываю асинхронную функцию, забыл передать в нее переменную, но в функции есть проверка 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", что бы я мог повторить проблему

  • @Fox

    https://dropmefiles.com/BA36E

    ну ошибку то специально в веб интерфейсе я не ловил, может поэтому и не понял что происходит. Да как то об этом я и не подумал, что в веб интерфейсе отдельно ловить надо ...
    Обычно то все ошибки и так сыпятся в лог ...

  • @DuckDuck said in Асинхронная функция не завершается если не объявлена переменная.:

    @Fox

    https://dropmefiles.com/BA36E

    ну ошибку то специально в веб интерфейсе я не ловил, может поэтому и не понял что происходит. Да как то об этом я и не подумал, что в веб интерфейсе отдельно ловить надо ...
    Обычно то все ошибки и так сыпятся в лог ...

    В вашем коде вызова вы ожидаете получить результат, однако в функции вы ни какой результат не возвращаете (нет действия "Return"). Я на пустом интерфейсе добавил ваш код вызова вашей функции:

        $("#Start").click(async function(){
            Log("Starting task")
            var restarting = await Api.RunFunction("the_end",{})
            Api.Restart()
            Log("Result: '" + Result + "'")
            Log("Task completed")
        })
    

    И вызов сработал корректно вернув ошибку

    support1537.gif

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

  • 0 Votes
    4 Posts
    83 Views
  • 0 Votes
    4 Posts
    371 Views
  • 0 Votes
    4 Posts
    817 Views
  • 0 Votes
    15 Posts
    2952 Views
  • 0 Votes
    11 Posts
    1946 Views