как сломать родительскую функцию на основе дочернего результата в скрипте приложения Google? - PullRequest
0 голосов
/ 02 марта 2020

Как я могу сломать родительскую функцию в зависимости от результата дочерней функции как способа проверки всего на случай, если что-то не так в дочерней функции? В настоящее время у меня есть следующее:

function Parent() { 
  Step1();
  Step2();
  Step3(); 
}

, и я хотел бы сломать родительскую функцию, если, например, дочерняя функция "Step1 ()" не завершена.

Я думал, что смогу создать глобальная переменная в качестве флага, объединенная с оператором if в родительской функции, так что если флаг изменится с «true» на «false» в функции child , вся родительская функция сломалась бы, но это не сработало, выдав ошибку, говорящую, что "останов незаконен" Вот что я попробовал:

var flag = "true" // Global variable

function Parent() { 
  Step1(); //Within this child function, I have an "if" condition that sets flag "true"/"false" depending on the outcome

     if (flag == "false") { //I was hoping this would read the incoming flag and trigger a break, if the flag was set to "false" in Step1();
     }

  Step2();

  Step3(); 
}

Прямо сейчас мой скрипт выполняет все дочерние функции, даже если Step1 () неверен, и без способа остановить эту последовательность я просто буду получать нежелательные результаты от родительская функция.

Я также подумал, что если бы я использовал "break;" в любой точке во всем файле .gs это могло бы сломать все это, но это не так. Если я запускаю Step1 () для его собственного и условия «if» активируют «break;» она успешно завершается, но когда я запускаю родительскую функцию, она просто продолжает переходить к следующей функции.

Спасибо, Нестор

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Чтобы успешно разбить, добавьте return

Оператор возврата завершает выполнение функции

if (flag == "false") { return; }

В качестве альтернативы вы можете throw сделать ошибку или поиграть с try...catch

Фрагмент Live:

let flag = 0;
function main() {
  console.info("main1");
  function step1() {
    console.info('step1');
    flag = 1;
  }
  function step2() {
    console.info('step2');
  }
  step1();
  if (flag) return; //stops execution
  step2();
}

function main2() {
  console.info("main2");
  function step1() {
    console.info('step1');
  }
  function step2() {
    console.info('step2');
    throw new Error('Step 2 fatal error');
  }
  function step3() {
    console.info('step3');
  }
  try {
    step1();
    step2();
    step3();
  } catch (e) {
    console.error(e.message);
  }
}
main();
main2();
0 голосов
/ 02 марта 2020

применить логи удара c

   let flag = true;
    function(){
        if (flag == "false") { 
            "false" in child1();
            goto lineContinue
         }

     child2();
     child3();

    }

    lineContinue: child4();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...