Как заморозить / остановить JavaScript выполнение до завершения функции - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу знать, как я могу остановить / остановить JavaScript выполнение до завершения функции (с использованием JavaScript / NodeJS). Например: enter image description here

Первая строка кода в консоли показывает предупреждение об использовании, JavaScript выполнение останавливается / останавливается до тех пор, пока пользователь не нажмет ok. enter image description here

И когда это будет сделано, вторая строка кода продолжит выполнение enter image description here

Теперь я знаю, что я для этого следует использовать функции asyn c, но это не работает, вот мой код узла, загруженный в сценарий предварительной загрузки webview в Electron :

global.alert = async (text) => {
  //replace it with custom alert!
  ipcRenderer.sendToHost('ShowAnAlert', {
    theWebsiteLink: location.href,
    theMessage: text
  });
  var a = await function(){
    return new Promise(resolve => {
      ipcRenderer.on('GetResult', () => {
        console.log("Done!");
        resolve("result");
      });
    });
  }();
  return a;
}

Но он не останавливается / не останавливается JavaScript выполнение, когда оно сформировано. Как это исправить?

РЕДАКТИРОВАТЬ 1: Хорошо, получается, что асинхронный не тот ответ, который я ищу .

global.alert = (text) => {
  //replace it with custom alert!
  ipcRenderer.sendToHost('ShowAnAlert', {
    theWebsiteLink: location.href,
    theMessage: text
  });
  var a = ipcRenderer.on('GetResult', () => {
    console.log("Done!");
  });
  return a;//this is returned as undefined
}

Я удалил асинхронных частей в скрипте. Но функция не останавливает / останавливает выполнение JavaScript. Любая идея, как я могу это сделать?

РЕДАКТИРОВАТЬ 2: Если это невозможно сделать в чистом JavaScript, есть ли другие способы сделать это с помощью Electron встроенные функции или Электронные библиотеки / модули

1 Ответ

2 голосов
/ 08 апреля 2020

Функция asyn c по определению асинхронна и не останавливает выполнение скрипта. Если вы хотите, чтобы он остановил выполнение, вам нужно удалить его асинхронные части (Promise, asyn c & await).

Часть

var a = ipcRenderer.on('GetResult', () => {
    console.log("Done!");
  });

- это прослушиватель событий, поэтому он будет ожидать события «GetResult» перед запуском в нем console.log. Это также вернет undefined, поэтому a не определено.

...