2015-04-23 64 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

我不确定在这里使用承诺有助于“简单化”。 –