2014-03-14 81 views
0

任何人都可以向我解釋爲什麼我正在處理50條記錄,但我從來沒有得到console.log("all records processed");到控制檯。如何確保您使用Javascript正確關閉您的函數?

這就像我正在關閉一個功能太早或太晚。使用回電時最好的方法是什麼,因爲我確信這就是爲什麼我沒有得到"all records processed"。我正在使用節點v0.10.26與NPM oracle插件。

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

這是在黑暗中拍攝的,但是您是否嘗試將doRead()函數放入根名稱空間中,而不是將其嵌入到oracle.connect內? –

回答

0

是否有區別,你在connectData的大括號之後沒有分號?就我個人而言,我只是設置了越來越多的控制檯日誌,直到我找出弄亂一切的線。如果可以的話,或者使用斷點。

+0

謝謝,我加了半。但奇怪的是,每次你開始記錄時它的行爲都不一樣,所以也許我錯過了另一個? – justZito

+1

connectData之後的分號完全不會對控制流產生任何影響。事實上,除了當下一行的第一個字符是'['或'('。「時)時,幾乎在任何情況下分號都是無用的。參見http://blog.izs.me/post/2353458699/an-open-letter- to-javascript-leaders-about。 – alex

0

對於這些一步一步的回調,我建議您使用async來管理回調金字塔。

+0

這是一個建議,不是對問題的回答,所以它應該是對問題的評論。 –

相關問題