node.js - NodeJs/Electron : How to wait for function to finish before ipcMain send back his answer?

标签 node.js electron

我正在学习 Nodejs 和 Electron,我正在尝试从渲染器接收数据,处理这些数据,然后将它们发送回渲染器。但是我的处理函数太慢或者我真的不知道,所以ipc过早发回数据并生成未定义的数据。 简而言之,我希望我的 treat 函数在 ipcMain 事件发回消息之前完成。 这只是我陷入困境的一个例子,虽然这不是我真正的代码,我可以向您发送真实的代码,但它真的很困惑,就像很多......

// In main process.
const {ipcMain} = require('electron')

function treatData (input) {
var treated = treat(input)
    // ...
console.log(treated) // prints the actual treated data
return treated;
}

ipcMain.on('asynchronous-message', (event, rawdata) => {
  console.log(rawdata) // prints my raw data
  var dataTreated = treatData(rawdata)
  console.log(dataTreated) // prints Undefined
  event.sender.send('asynchronous-reply', dataTreated) // send Undefined data
})

当我每天都在学习新事物时,我经常坚持我认为的基本内容......但我在这里,我需要你的帮助。我已经寻找过像我这样的问题,但我找不到任何东西,因为我不知道问题实际上叫什么。 我搜索了带有 async 和 wait 的异步函数,但我不知道如何将它们放在这里。因为 async 似乎不适用于 ipcMain 或者我不知道我错过了什么,但这不起作用:

async function RenderMessage () {
ipcMain.on('asynchronous-message', (event, rawdata) => {
  console.log(rawdata) // prints my raw data
  var dataTreated = await treatData(rawdata)
  console.log(dataTreated) // prints Undefined
  event.sender.send('asynchronous-reply', dataTreated) // send Undefined data
 })
}

它返回“await 是一个保留字”

提前致谢!

最佳答案

为了实现等待另一个函数的回调,您错过了两件重要的事情:

  1. 您的函数(待等待)应返回一个 Promise 对象,以便能够 be awaited
  2. 您的回调应该是一个async函数,以便能够await
const {ipcMain} = require('electron')

function treatData (input) {
  return new Promise((resolve, reject) => {
    var treated = treat(input)
    // ...
    resolve(treated)
  })
}
ipcMain.on('asynchronous-message', async (event, rawdata) => {
  var dataTreated = await treatData(rawdata)
  event.sender.send('asynchronous-reply', dataTreated)
})

关于node.js - NodeJs/Electron : How to wait for function to finish before ipcMain send back his answer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52003764/

相关文章:

javascript - res.render 不加载新页面

javascript - 如何序列化NodeJS?

javascript - 在nodejs中使用async和await获取Promise { <pending> }

javascript - 是否可以在 Electron electron-quick-start JS 应用程序中禁用放大/缩小功能?

node.js - Electron 重建 grpc 构建失败

php - Pusherapp 库

javascript - 我可以使用 node.js、angular 和 sequelize 构建移动应用程序吗?

Electron 打包程序没有从 node_modules 安装所有模块

angular - 如何在 Typescript 中编译单个文件?

node.js - 如何为 Electron-builder 配置设置 github 代理?