2017-09-29 10 views
1

IBM Bluemix에서 현재 cloud-foundry-application으로 Node-RED를 사용하고 있습니다. 그래서 Google 크롬 브라우저에서 실행되는 Node-RED의 흐름 편집기를 사용하고 있습니다. 내 흐름에, 나는 함수 노드를 가지고 있으며,이 하나가 실행될 때마다, 응용 프로그램이 충돌하고 그것을 다시 시작했습니다. 여기 for loop in function 노드가 IBM Bluemix에서 Node-RED 애플리케이션의 충돌을 야기합니다.

함수 노드의 코드입니다 :

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; 

내가있는 문제를 찾았 사이 for 루프/* * /이 부분없이 응용 프로그램이 충돌하지 않기 때문에.

내가 원하는 것은 게이트웨이의 센서 데이터가있는 msg 객체를 얻는 것입니다. 이 게이트웨이에는 ID가 있고 게이트웨이에 측정 데이터를 전송하는 여러 개의 센서가 연결되어 있습니다. 그 데이터를 구별하고 저장하기 위해, 나는 모든 센서의 ID를 등록하고 그것을 노드의 텍스트 파일에 저장하려고합니다. for 루프에서 ID가 이미 등록되어 있는지 확인합니다.

누군가가이 충돌을 일으킬 수있는 것을 알고 있다면, 나는 매우 감사 할 것입니다.

P. 중요한지는 모르겠지만 자격 증명, 설정 및 흐름 자체는 cloudantDB에 저장됩니다. 루프에 대한 자바 스크립트

+0

컨텍스트가 아닌 전역/흐름을보고 싶을 수 있습니다. 그럼에도 불구하고 로그 출력을 포함시키는 것이 좋습니다. 'bx cf logs '을 실행하여 로그를 끝내고, 크래시를 재현하고, 거기에 관련된 것이 있는지 확인하십시오. 아니면 UI에 자신을 종속시킬 수 있고 거기에 로그를 볼 수 있습니다. – amadain

+1

어떤 오류가 발생합니까? –

+0

내 내장은 루프 내에서 컨텍스트를 설정하는 것이 최적이되지 않는다고 말합니다. 일반적으로 컨텍스트에서 값을 참조/복사하고 로컬 변경 사항을 적용한 다음 다시 적용 할 수 있습니다. – grantwparks

답변

0

이 질병은 본질적으로 사용자의 상황

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

의 좌측하는 동안 아닌 정도로까지 또는 필드가 정의 될 때 그러하다. id_array [257]와 그 이상을 액세스 할 것이고, 접근 할 수없는 메모리 예외가 발생한다는 것을 의미합니다. catch되지 않으면 응용 프로그램이 중단되지 않습니다.