2013-01-23 2 views
0

node.js.에 문제가 있습니다. 프로그램의 명령은 시간적으로로드되지 않으며 나는 그것을 수행하는 방법을 모른다. 데이터베이스에서 일부 이미지와 텍스트를 다운로드하고 팩 8과 함께 보내려고합니다. 그러나 node.js는 루프와 명령 루프 이후에 동시에 실행됩니다. 비동기의 세계에Node.js 연대순 문제

socket.on('background_dinamically', function(data){ 
     connection.query("SELECT * FROM products WHERE id='"+data.cathegory+"'" , function(err, rows, fields){ 
      var count = 0; 
      var array_elements = []; 
      if(err){ 
       socket.emit('errorserver'); 
      }else{ 
       for (var i = rows.length - 1, count; i >= 0; i-- & count ++) { 
        array_elements.push(rows[i]); 
        if (count == 8) { 
         socket.emit('image_loading_background', [array_elements, data]); 
         count = 0; 
         array_elements = []; 
        } 
       }; 

       if(count > 0 && count < 8 && count != 0) { 
        socket.emit('image_loading_background', [array_elements, data]); 
       } 
      } 
     }); 
    }); 

답변

0

Marc, 먼저 클라이언트 측에서 동기화를 수행 할 수 있는지 확인합니다. 클라이언트에 데이터를 보내기 전에 nodejs 앱을 강제로 동기화하면 확장성에 어려움이 있습니다.

서버 측에서 동기화하지 않으면 할 수없는 경우 스파게티 코드 또는 동기화 라이브러리 중에서 선택할 수 있습니다.

0

에 오신 것을 환영합니다 (연대순되지 않음) 프로그래밍 :

여기 내 코드입니다. 기본적으로 노드는보고있는 것과 같이 병렬로 I/O 작업을 수행합니다. 연대기 (직렬), 병렬 배치 및 오류 처리 도우미와 같은 다른 동작을 얻으려면 많은 flow control libraries 중 하나를 살펴보십시오. 특히 caolan/async을 권장합니다.

+0

외부 라이브러리가 없어도이를 수행 할 수있는 방법이 있습니까? 감사! –

+0

예! 외부 라이브러리가 어떻게 그럴 것이라고 생각하십니까? 중요한 점은 흐름 제어 패턴은 일반적인 패턴이므로 다시 사용할 수있는 라이브러리로 분류하는 것이 좋습니다. 그러나 낮은 레벨을 수행하는 기본 기술에는 일부 중첩 콜백, 예정된 작업 대기열 및 대부분의 경우 인덱스 및 카운터 저장이 포함됩니다. 해당 라이브러리의 소스 코드를 확인하여 작동 방법을 확인하십시오. –