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