为什么我对ipcMain的答复按字母顺序排序?

时间:2019-05-06 18:40:39

标签: javascript electron

我有一个函数,该函数将查询发送到ipcMain,然后等待SQL查询运行。当响应返回时,我遍历返回的数据并将其显示在屏幕上,以供用户查看。

由于某种原因,无论何时返回数据,我都会在渲染过程中记录该数据,然后按字母顺序对其进行排序。我无法确定这种排序发生的位置/原因。

在我看来,基于console.logs,是在ipcMain发送请求与呈现过程接收到正在排序的数据之间的某个时间。

任何见识都会得到赞赏。

我已经登录了所有明显的地方,以查看是否可以诊断订购的来源。

// function that gets the results
// This console.log is alphabetically sorted here
  runQuery(config){
    window.ipc.send('run-query', config);
    return new Promise((resolve, reject) => {
      window.ipc.on('run-query-reply', (event, result) => {
        console.log(result)
        resolve(result);
      });
    });
  }
// calls handler - it is not sorted on this console.log
ipcMain.on('run-query', async (event, arg) => {
  var results = await handlers.runQuery(event, arg, scope);
  console.log(results)
  event.sender.send('run-query-reply', results)
})
// handler function - it is not sorted on this console.log
  async function runQuery (){
    try {
      var connection = await new scope.sql(arg.server.database, arg.server.username, arg.server.password, config);
      return await connection.query(query).spread((results) => {
        console.log(results)
        return results;
      })
    } catch (error) {
      return scope.errorHandler(error.message)
    }
  }

样本数据:

// Data in ipcMain would like like:
{
 "email": "test", 
 "contact-id":"1",
 "first-name":"test", 
 "allow-email":test"
}
// Data from render window.ipc
{
 "allow-email":"test", 
 "contact-id":"1",
 "email": "test", 
 "first-name":"test"
}

1 个答案:

答案 0 :(得分:1)

我相信这很可能是您的控制台在Chrome中登录的产物。

很可能您的ipcMain登录到终端,并保持对象键顺序。

您的渲染器window.ipc登录Chromium开发工具控制台,该控制台将按字母顺序显示对象键。

另请参阅Show original order of object properties in console.log