出现了很多混乱,所以我把这个问题改写得更清楚了。我将描述如何处理请求的整个过程,但是这个问题只与过程的第一部分有关。
我有一个名为requests
的对象,它被初始化为空。我的node.js服务器中的其他模块添加了以下格式的请求对象:
requests["name of request"] = {
requestType: "type of request",
parameters: {
"request parameters here"
},
callback: function(data){//Do stuff with the data}
}
以下是处理此类请求的方法。
所有请求必须调用速率受限的外部JSON API。我可以将个别请求分组到大小为1-40的组中,无论组的大小如何,它只会被视为针对我的速率限制的1个请求。因此,为了最大化我对速率限制的使用,我应该尝试制作尽可能大的组,同时不要延迟单个请求的处理。
由于最大组大小为40,我需要从requests
对象获取40个请求,然后将其复制到名为inProgressRequests
的第二个对象中,保持所有剩余对象不变。然后我想删除它们以防止请求被多次处理。
完成此操作后,我可以调用外部API,一次处理所有40个请求。我批量接收数据,然后我必须将数据分成40个部分。然后,我需要将正确的数据部分作为data
参数返回到正确请求的回调函数。
如果我要使用数组然后为每个数据块(其中有40个),我将不得不循环遍历数组以找到正确的请求,然后将其数据块返回给它。这将要求我在阵列中循环总共40次,这是低效的。因此我决定使用一个对象,因为我可以更有效地访问每个请求,如下所示:requests[requestName]
因此,除非有一种更有效的方法来搜索无序数组中的请求对象,否则不能使用数组。
我的问题是,我执行处理请求的第一部分的时间和资源最有效的方法是什么?也就是说,从requests
对象获取前40个单独的请求对象然后从requests
对象中删除它们的最有效方法是什么?
答案 0 :(得分:1)
是的,你可以通过
删除对象的请求delete requests[requestName];
这将删除此request
对象的请求。
如果你想复制第一个和删除基于数组
的requestNamesrequestNames.forEach( function( requestName ){
secondRequests[ requestName ] = requests[ requestName ];
delete requests[ requestName ];
});