2015-06-26 37 views
-1

這可能是非常明顯的......我需要在函數中做些什麼來確保這個過程繼續進行?什麼是停止此查詢的其餘部分?

function processRow(row){ 
    console.log(row.title); 
    query.resume(); 
} 

console.log("connecting to MySQL") 
var connection = Mysql.createConnection({ 
    host: '178.62.123.210', 
    user: 'mongo', 
    password: 'xxxxx', 
    database: 'd14' 
}); 

connection.connect(function (err) { 
    if (err) { 
     console.log('error connecting: ' + err.stack); 
    } 
    console.log('connected as id ' + connection.threadId); 
}); 

var query = connection.query('SELECT * from archives limit 50'); 

query.on('result', function(row) { 
    // Pausing the connnection is useful if your processing involves I/O 
    connection.pause(); 

    processRow(row, function() { 
     connection.resume(); 
    }); 
}); 

它做一個記錄,(還有更多)

+0

我應該添加「query.resume();」只會引發錯誤。 – latitudehopper

+0

它應該是'query.resume()'還是'connection.resume()'?你在你的問題中都有,但是前面給出'connection.pause()',它似乎應該是'connection.resume()',而不是'query.resume()'。 –

+0

你在connection.connect'回調中的錯誤處理是不正確的:如果有錯誤,你記錄它,但你繼續進行,就像你連接。你可能想要一個'返回'那裏。 –

回答

0

你打電話query.resume()停止。它應該是connection.resume()(你在別處打電話)。選擇你想要恢復的地點,並在那裏撥打connection.resume()

我會仔細看看例子listed on the node-mysql page。代碼中存在幾個與示例顯示不同的錯誤,如query.resume(),並且在connection.connect回調中遇到錯誤時不返回。您的代碼還會將回調傳遞給processRow,其中processRow從不會調用。

這裏是具有較爲明顯的問題,一個固定的版本:

// I would move this down nearer to where it's used 
function processRow(row, callback) {      // <=== accept the callback 
    console.log(row.title); 
    callback();           // <=== call the callback 
} 

console.log("connecting to MySQL") 
var connection = Mysql.createConnection({ 
    host: '178.62.123.210', 
    user: 'mongo', 
    password: 'xxxxx', 
    database: 'd14' 
}); 

connection.connect(function (err) { 
    if (err) { 
     console.log('error connecting: ' + err.stack); 
     return;           // <=== return, don't fall through 
    } 
    console.log('connected as id ' + connection.threadId); 
}); 

// No need for a query variable here 
connection.query('SELECT * from archives limit 50') 
    .on('result', function(row) { 
     connection.pause(); 

     processRow(row, function() { 
      connection.resume(); 
     }); 
    }); 
-1

OK,但它確實需要connection.resume();我缺乏知識不能解決爲什麼需要兩個。

function processRow(row){ 
    console.log(row.title); 
    connection.resume(); 
} 

console.log("connecting to MySQL") 
var connection = Mysql.createConnection({ 
    host: '178.62.123.210', 
    user: 'mongo', 
    password: 'xxx', 
    database: 'd14' 
}); 

connection.connect(function (err) { 
    if (err) { 
     console.log('error connecting: ' + err.stack); 
    } 
    console.log('connected as id ' + connection.threadId); 
}); 

var query = connection.query('SELECT * from archives limit 50'); 

query.on('result', function(row) { 
    // Pausing the connnection is useful if your processing involves I/O 
    connection.pause(); 

    processRow(row, function() { 
     connection.resume(); 
    }); 
}); 
+0

我不認爲有*做*必須是兩個。我很確定只需要一個。但是因爲你的'processRow'永遠不會調用它的回調函數,所以第二個函數永遠不會被調用,所以並不會導致問題。 –

+0

請注意,這個答案只是我的答案的一個副本,但是出現了未解決的未解決的問題。 –

相關問題