2015-04-23 101 views
1

我想使它簡單地同步在函數之前開始並在函數結束之後的串聯字符串。請參閱代碼片段,並簡單得到如下輸出:如何使節點js中的同步

<products> 
<proudct_name>Product1</product_name> 
<proudct_name>Product2</product_name> 
<proudct_name>Product3</product_name> 
</products> 

任何積極的答覆將不勝感激。

var mysql = require('mysql'); 
var connection = mysql.createConnection({ 
     host  : 'localhost', 
     user  : DB_USER, 
     password : DB_PASS, 
     database : DB_NAME, 
}); 

connection.connect(); 

var query = connection.query('SELECT * FROM tbl_product limit 0,3'); 

var str = '<products>'; 

query.on('result', function (row) { 
    str += '<product_name>'row.product_name + '</product_name>'; 
}); 

str += '</products>'; 

console.log(str); 
+1

在完成時可能會發送另一個事件類型,不是嗎?或者是'on(「result」'用整個結果集調用?什麼是query1? –

+0

你使用的是node-mysql https://github.com/felixge/node-mysql/包? – Yalamber

+0

現在有道理嗎? – user3699262

回答

1

您可以使用像Q這樣的承諾來編寫同步查看/行爲異步代碼。 隨着Q,你會寫上面一樣

var str = '<========='; 
var defer = Q.defer(); 
query1.on('result', function (row) { 
    defer.resolve(row.company_name + ','); 
}); 

defer.promise.then(function(row){ 
    var str = "<=======" + row.company + "====>"; 
    console.log(str); 
}); 

您可以使用超時技術爲好。承諾是更好的,並在即將到來的JavaScript集成ES6規範。

根據評論,更現代的承諾框架存在更多的功能。 bluebird提供了一個很好的方式來輕鬆地提供現有的功能。

+1

Q是一個古老的承諾實現,順便說一句,OP可能想要使用一些現代的東西 –

+0

另外, Q本身大多是不正確的,你可能的意思做'defer.promise.then'沒有'Q.when'(它應該是'Q('btw。 –

+0

我不確定在這裏使用承諾有助於「簡單化」。 –