2014-03-14 4 views
0

50 레코드를 처리하는 이유는 누구에게 설명 할 수 있습니까?하지만 결코 콘솔에 console.log("all records processed");이 표시되지 않습니다.Javascript를 사용하여 함수를 올바르게 종료하는 방법은 무엇입니까?

너무 빨리 또는 너무 늦게 함수를 닫는 것과 같습니다. 왜 내가 "all records processed"을 얻지 못했는지 확신하기 때문에 콜백으로 작업 할 때 가장 좋은 방법은 무엇입니까? 노드 v0.10.26을 NPM 오라클 플러그인과 함께 사용하고 있습니다.

var oracle = require('oracle'); 

var connectData = { 
    hostname: "127.0.0.1", 
    port: 1521, 
    database: "xe", // System ID (SID) 
    user: "user", 
    password: "password" 
}; 

oracle.connect(connectData, function(err, connection) { 
    if (err) { 
     console.log("Error connecting to db:", err); 
     return; 
    } 
    connection.setPrefetchRowCount(50); 
    var reader = connection.reader("SELECT * FROM CARS", []); 
    function doRead(cb) { 
     reader.nextRow(function(err, row) { 
      if (err) return cb(err); 
      if (row) { 
       // do something with row 
       console.log("got " + JSON.stringify(row)); 
       // recurse to read next record 
       return doRead(cb) 
      } else { 
       // we are done 
       return cb(); 
      } 
     }); 
    } 
    doRead(function(err) { 
     if (err) throw err; // or log it 
     console.log("all records processed"); 
    }); 
}); 
+2

코드에 아무런 문제가없는 것 같습니다. '행'은 항상 '사실'입니까? –

+0

가장 이상한 일이 아니라 마지막 명령 인 console.log ("모든 레코드가 처리됨")를 가져옵니다. 프리 페치 행은 작동하지만 연결이 닫히지 않으면 어딘가에 세미콜론이 필요합니다! – justZito

+0

이것은 어둠 속에서 촬영되었지만 oracle.connect 내부에 포함하지 않고 루트 네임 스페이스에 doRead() 함수를 넣으려고 했습니까? –

답변

0

닫는 중괄호 (connectData) 뒤에 세미콜론이 없다는 차이점이 있습니까? 개인적으로, 나는 모든 것을 망쳐 놓고있는 라인을 찾아 낼 때까지 점점 더 많은 콘솔 로그를 설정합니다. 가능한 경우 중단 점을 사용하십시오.

+0

감사합니다. 세미를 추가했습니다. 그러나 이상한 부분은 로그를 기록 할 때마다 다르게 동작하므로 다른 것을 놓치고있는 것일 수 있습니다. – justZito

+1

connectData 이후의 세미콜론은 제어 흐름에 아무런 영향을 미치지 않습니다. 사실, 세미콜론은 다음 줄의 첫 번째 문자가'['또는''('.http : //blog.izs.me/post/2353458699/an-openletter- to-javascript-leaders-with. – alex

0

이 단계별 콜백의 경우 async을 사용하여 콜백 피라미드를 관리하는 것이 좋습니다.

+0

이것은 제안 사항이며 질문에 대한 대답이 아니므로 질문에 대한 의견이어야합니다. –

관련 문제