javascript - 如何卡住/停止 JavaScript 执行直到函数完成

标签 javascript node.js asynchronous async-await electron

我想知道如何卡住/停止 JavaScript 执行,直到函数完成(使用 JavaScript/NodeJS)。 例如: enter image description here

控制台中的第一行代码显示了使用警报,JavaScript 执行被卡住/停止,直到用户单击 okenter image description here

完成后第二行代码将继续执行 enter image description here

现在,我知道我应该使用异步函数来做到这一点,但这不起作用,这是我的 Node 代码,它加载在 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 原生函数或 Electron 库/模块来实现此目的

最佳答案

根据定义,异步函数是异步的,不会停止脚本的执行。如果您希望它停止执行,您需要删除其中的异步部分(Promise、async 和await)。

部分

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

是一个事件监听器,因此它将等待“GetResult”事件,然后再运行其中的console.log。这也将返回 undefined,因此 a 是未定义的。

关于javascript - 如何卡住/停止 JavaScript 执行直到函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61095497/

相关文章:

javascript - 在网站上创建一个链接以发布到 "ifttt.com"但保留在我的网站上

node.js - socket.io:将敏感数据存储在握手对象中是否安全?

node.js - 如何使用 github 部署 firebase 函数

node.js - 如何防止每条新推文触发 Twitter 流中的回调?

javascript - 我们如何知道所有的异步操作、所有的回调都完成了,并等待它们

javascript - 如何从 Javascript 中的多维数组中获取元素

javascript - 如何获取另一个域的页面源(使用 Javascript!)

javascript - Jasmine 测试以验证回调不会引发错误

javascript - 如何修改对象的javascript数组,例如将对象值修改为键值对

javascript - Font Awesome 5 中的 dom.i2svg() 不工作