我正在学习nodejs和electronic,并且试图从渲染器接收数据,处理这些数据,然后将它们发送回去。但是我的处理功能太慢,或者我真的不知道,所以ipc太早发送回数据并生成未定义的数据。
简而言之,我希望我的处理功能在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搜索了异步函数,然后等待,但是我不知道我怎么能把它们放在这里。因为异步似乎不适用于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
 })
}

它返回“等待是保留字”

提前致谢 !

最佳答案

您错过了两个重要的事情来实现等待另一个功能的回调:

  • 您的函数(等待)将返回一个Promise对象,以便能够be await ed
  • 您的回调应该是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/

    10-13 06:05