JavaScript如何将事件用作函数的返回值?

问题场景

做electron项目的时候,需要对大量 外部 webview进行频繁操作,需要向引入的第三方页面里面传递JavaScript脚本代码,同时要获取到代码执行后的返回值。

自己得思路

传递JavaScript到第三方页面这个好说,在electron文档里面用
webview.executeJavaScript(code);函数就可以,获取他的返回值,我的思路是直接获取在控制台打印的数据,在electron文档里也有一个获取控制台消息的事件:

webview.addEventListener('console-message', (e) => {
        console.log('console message:', e.message)
})

问题

现在有一个需求,是将这两个功能封装成一个函数,比如

function sendJavaScriptCode(webview,code){
    
}

参数1传入webview对象,code传入要传递的JavaScript脚本代码,然后这个函数的返回值就是在console获取到的信息。

可是,我不知道怎么把一个事件封装到函数里,让函数可以直接返回一个事件的传过来的值。

我刚刚接触这一块,正在恶补js基础,但是要学习的东西实在太多,这个需求马上就要了。有了解的大佬希望可以帮我解决一下这个问题,尽量用通俗易懂的方式。小弟在此感激不尽!

另外附上electron文档地址:https://www.electronjs.org/do...

阅读 3k
1 个回答

问题的本质在于,获取console信息是一个异步过程,所以你的函数是不可能同步返回e.message的,可以选择返回一个Promise,或者将函数写成async/await

举个Promise版本的例子:

function sendJavaScriptCode(webview, code) {
  return new Promise((resolve, reject) => {
    webview.addEventListener("console-message", (e) => {
      resolve(e);
    });
  });
}

// 使用
sendJavaScriptCode(webview, code).then((e) => {
  console.log(e.message);
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题