Остановить выполнение фонового сценария при нажатии кнопки событие

#typescript #google-chrome-extension

Вопрос:

У меня есть кнопка в моем всплывающее окно, чтобы остановить/запустить скрипт, он отлично работает, когда я иду, чтобы запустить его, но когда я иду, чтобы остановить его, вместо сценария мешает он просто выполняет новый фоновый процесс с appState = 0 и appState = 1 продолжает работать, есть ли способ сделать фон скрипт останавливает выполнение функции структура у меня есть прямо сейчас?

   stopStart(): void {
    if (this.currentUser.appState === 0){
      this.globalsService.setCurrentUserState(1);
      this.activate();
    }
    else {
      this.globalsService.setCurrentUserState(0);
      this.activate();
    }
  }

  activate(): void {
    chrome.runtime.sendMessage({
      appState: this.globalsService.getCurrentUserState(),
      iterations: 5
    }, (response) => {
         // TODO
      }
    });
  }
 

фон

 chrome.runtime.onMessage.addListener(
  async (request, sender, sendResponse) => {
    const actionOne = async () => {
      await actionTwo((value) => {
        const data = value;
        const result = actionThree(value);
    };
    let cont = 0;
    while (request.iterations > cont){
      console.log('State:', request.appState);
      // If user disables script break loop immediately
      if (request.state === 0){
        return true;
      }
      await actionOne();
      cont  ;
    }
    /* Finish */
    console.log('Finished');
    return true;
  }
);
 

Комментарии:

1. Извлеките код из onMessage в глобальную функцию и добавьте глобальную переменную like shouldStop , которая будет проверяться внутри while цикла (также вложенные функции) и назначаться в onMessage в зависимости от request .