for循环function节点导致IBM Bluemix上的Node-RED应用程序崩溃

我正在使用Node-RED作为IBM Bluemix上的云代工应用程序。 所以我使用的是在Google Chrome浏览器上运行的Node-RED的stream编辑器。 在我的stream程中,我有一个function节点,每次这个执行,应用程序崩溃,我必须重新启动它。

这里是函数节点的代码:

var id_array = context.get('id_array')||[]; var id_index = context.get('id_index')||0; var first_time_execution = context.get('first_time_execution')||true; var i; var sensor_id = msg.payload.sensor_data.sensor_id; if(first_time_execution){ id_array[0] = undefined; first_time_execution = false; context.set('first_time_execution', first_time_execution); } /*for(i = 0; (id_array[i] === undefined) || (i > 256); i++){ if(sensor_id == id_array[i]){ msg.payload.array_index = i; context.set('id_array', id_array); context.set('id_index', id_index); return msg; } }*/ id_array[id_index] = sensor_id; msg.payload.array_index = id_index; if(id_index > 256){ id_index = 0; }else{ id_index++; } context.set('id_array', id_array); context.set('id_index', id_index); return msg; 

我find了/ * * /之间的for循环的问题,因为没有这个部分,应用程序不会崩溃。

我想要做的是:我从网关获取传感器数据的味精对象。 连接到这个网关的是几个传感器,它们有一个ID,并将测量数据发送到网关。 为了区分和存储这些数据,我想注册每个传感器的ID并将其存储在节点的context中。 在for循环中,我正在检查ID是否已经被注册。

如果有人知道可能会导致这次事故,我会非常感谢。

PS我不知道这是否重要,但凭据,设置和stream本身存储在一个cloudantDB。

在javascript for循环中,条件本质上是一个时间,而不是一个条件

 (id_array[i] === undefined) || (i > 256) 

当字段未定义时,or的左边是true。 当迭代超过256时,右边是正确的。这就意味着你将访问id_array [257]以及之后的内存,并且会得到一个不可访问的内存exception,除非被捕获,否则会导致应用程序崩溃。