我想知道如何卡住/停止 JavaScript 执行,直到函数完成(使用 JavaScript/NodeJS)。 例如:
控制台中的第一行代码显示了使用警报,JavaScript 执行被卡住/停止,直到用户单击 ok
。
现在,我知道我应该使用异步函数来做到这一点,但这不起作用,这是我的 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/