Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript内部执行函数之前,多次接收并等待从中接收的具有类似ID的请求_Javascript_Arrays_Sockets - Fatal编程技术网

在Javascript内部执行函数之前,多次接收并等待从中接收的具有类似ID的请求

在Javascript内部执行函数之前,多次接收并等待从中接收的具有类似ID的请求,javascript,arrays,sockets,Javascript,Arrays,Sockets,您能帮我解决以下问题吗?我想从具有类似ID的套接字返回的数组中获取值,并将它们传递给函数 First Received Request { "ID":"4567132", "GroupType":"2" "Name":"John Chris" "SocialID":"68799" "SecurityID":"18799-er7ree-781347a-71237n" } Second Received Request { "ID":"4567438", "GroupTyp

您能帮我解决以下问题吗?我想从具有类似ID的套接字返回的数组中获取值,并将它们传递给函数

First Received Request 

{
 "ID":"4567132",
 "GroupType":"2"
 "Name":"John Chris"
 "SocialID":"68799"
 "SecurityID":"18799-er7ree-781347a-71237n"
}


Second Received Request 

{
 "ID":"4567438",
 "GroupType":"2" 
 "SocialID":"68799"
 "SecurityID":"68789-4d37er-98c5347-e05d9b"
}

I would like to get the following Expected Results combined from the First and Second. But taking into consideration other request also coming in from the api.
{
 "GroupType":"2" 
 "SocialID":"68799"
 "PublicSecurityID":"18799-er7ree-781347a-71237n"
 "PrivateSecurityID":"68789-4d37er-98c5347-e05d9b"
}
使事情变得复杂的是,第一个和第二个请求同时被接收,并且套接字可能会接收到其他请求。如何仅对具有相似社交ID的传入消息进行分组。还有,我如何等待来自套接字的所有类似请求,并且只在没有更多请求时执行

下面是接收套接字的代码

ReceiveSocket.on("socketMessage", (returnedData) => {
    // code here       
});

我不知道如何合乎逻辑地处理这个问题。你能解释一下并给出解决问题的方法吗。谢谢

像这样的事情怎么样:

ReceiveSocket.on('socketMessage',returnedData=>{
//objectsBySocialID始终为空,以确保
//sendRequest()只接收新数据。请注意,所有以前的
//数据到达时已经被处理过了,就像
//当前一批数据正在处理中。
const objectsBySocialID={};
returnedData.forEach(obj=>{
//如果已经有一个或多个对象具有
//当前对象,然后将其添加到包含
//具有该社交ID的对象。
if(objectsBySocialID[obj.SocialID]){
objectsBySocialID[obj.SocialID]。推送(obj)
} 
//否则,初始化将包含以下对象的数组:
//此对象的特定Social ID并将其分配给
//对应的键。
否则{
objectsBySocialID[obj.social]=[obj]
}
//objectsBySocialID仅包含最新的更改。
sendRequest(objectsBySocialID);
});
});
使用示例中的数据,
objectsBySocialID
应该如下所示:

{
'68799': [
{
'ID':'4567132',
“GroupType”:“2”,
“姓名”:“约翰·克里斯”,
“Sociaid”:“68799”,
“SecurityID”:“18799-er7ree-781347a-71237n”,
},
{
'ID':'4567438',
“GroupType”:“2”,
“Sociaid”:“68799”,
“SecurityID”:“68789-4d37er-98c5347-e05d9b”,
},
{
“GroupType”:“2”,
“Sociaid”:“68799”,
“公共安全ID”:“18799-er7ree-781347a-71237n”,
“PrivateSecurityID”:“68789-4d37er-98c5347-e05d9b”,
},
],
}

当您完成数据收集和分组后,应该能够将
objectsBySocialID
作为参数传递给处理有序数据的函数(
sendRequest()

我可能会将这些json保存在数据库中,每当有新的请求时,我都会通过SociaID查询数据库,如果数据存在,我将合并它们以生成所需的输出,并永久保存在db中。即使两个请求在某个时间出现,也应该存在毫秒差异,并且机制应该work@Prakash注意到数据库中json的持久性,但我没有访问数据库的权限,它只是让我接收消息的第三方。有没有其他方法来处理这个问题?@John是
returnedData
单个对象还是包含对象的数组?您是否需要根据每个传入的JSON的
SocialID
值对其进行分组,还是仅限于几个“特殊的”
SocialID
s?您会调用使用接收值的同一文件中的值的函数吗?这是在节点环境中运行的,对吗?@Lual returnData只是一个包含对象的数组。是的,我需要根据每个传入JSON的社交ID值对它们进行分组。我好像收到了一条信息。是的,我可能会传递接收到的值或在函数中处理它,并将其输出到网站上,我仍然不确定如何处理它。目前它只是纯javascript。最后,我如何等待来自套接字的所有请求,并且只在没有更多请求时执行。例如,我将在套接字上传递我将调用sendRequest()函数的数据,它将调用sendRequest()3次,因为收到了3条消息。我如何处理以下问题?@John应用程序不应该一直运行吗?除非您关闭服务器或人们停止使用您的应用程序,否则应始终存在新请求。“不再请求”的确切含义是什么?我的意思是,如果我调用了内部的另一个方法或函数,假设从套接字接收到3条消息,然后我创建一个名为“sendRequest()”的函数,我将传递sendRequest(objectsBySocialID)。此sendRequest将更改显示屏上的数据3次。如何传递存储在数组中的值或检测数据中的任何新更改,然后仅在数组中有新的或更改时更改显示一次。我刚刚更新了答案,请告诉我是否还有其他需要解决的问题。