Javascript 为什么我对ipcMain的回复是按字母顺序排序的?

Javascript 为什么我对ipcMain的回复是按字母顺序排序的?,javascript,electron,Javascript,Electron,我有一个函数,它向ipcMain发送一个查询,然后等待SQL查询运行。当响应返回时,我循环返回的数据并将其显示在屏幕上供用户查看 出于某种原因,无论何时返回数据,并且我从渲染过程中记录数据,数据都会按字母顺序排序。我无法确定在何处/为什么会发生这种排序 在我看来,似乎是基于console.logs,在ipcMain发送请求和渲染进程接收数据之间的某个时间,它正在被排序 任何洞察都将被告知 我已经登录了所有明显的地方,看看我是否能诊断出订单是从哪里来的 // function that gets

我有一个函数,它向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);
      });
    });
  }
样本数据:

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

我相信这很可能是你的主机登录Chrome的产物

最有可能的情况是,您的ipcMain记录在终端中,保留对象键的顺序

而renderer window.ipc则登录在Chromium开发工具控制台中,该控制台按字母顺序呈现对象键


另请参见

在您的案例中,ipc是否仅是ipc的别名?是的。我将它绑定到窗口对象。谢谢,这是一个有趣的注意事项,但是,我正在将数据推送到数组中,这些数组也会显示在页面上,并且它们也是按字母顺序排列的,而不是数据的原始顺序。我拍摄了一个屏幕截图,显示了一个查询和按字母顺序返回的列:[link],这听起来像是一个完全不同的故事。请确保您提供了一个更相关的答案,或者甚至在一个新问题中提供了这些细节(您如何循环/推进到数组中)。我可以使用您原始答案中的一些线索来解决这个问题。看起来chrome正在重新组织对象,而不管它在console.log中的用途是什么,或者只是迭代。我在主视图中对对象进行了字符串化,然后发送它,然后从渲染器中解析它,所有内容都按正确的顺序排列。显式字符串化确实是一种更健壮的解决方案。在ipc期间,您可能仍然对electron自己对对象键重新排序的猜测是正确的,因为其他一些人也报告了类似的CPNcern,尽管没有足够的细节来确定确切的根本原因。
// 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"
}