Nodejs SQL连接和asynchronous模块
我一直在与Node.JS一起玩,我发现这个伟大的asynchronous库https://github.com/caolan/async 。 我想用这个replace传统的callback模型,因为它看起来更加令人愉快,而且更容易理解。
这是我的sql查询代码
function query_mssql(config, sql_string){ var connection = new sql.Connection(config, function(err) { // ... error checks if (err) { console.log('connection to mssql has failed'); //throw err; }else{ // Query var request = new sql.Request(connection); // or: var request = connection.request(); request.query(sql_string, function(err, recordset) { // ... error checks should go here : // output query result to console: console.log(recordset); return recordset; }); }
}); }
我想知道如何使这个asynchronous,就像图书馆给出的例子。
async.series([ function(callback){ // do some stuff ... callback(null, 'one'); }, function(callback){ // do some more stuff ... callback(null, 'two'); } ], // optional callback function(err, results){ // results is now equal to ['one', 'two'] });
有人可以帮我弄这个吗? 我不太明白错误报告是如何工作的。
基于克里斯的评论,瀑布方法如何在多层次调用时提供帮助?
function computeCurrentDefinitionResult(database, node_name) { async.waterfall([ function(callback) { var leaf_sql_query = "SELECT * FROM "+ JSON.stringify(database) +".dbo.LeafNode WHERE NodeName=" + "'" + node_name + "'"; query_mssql_internal(leaf_sql_query, callback); console.log('Might BE HAPPY'); }, ], function(err, recordset) { // ... error checks should go here : if (err) { console.log('mssql query has failed'); } // output query result to console: console.log(recordset); return recordset; }); function query_mssql_internal(sql_string){ return query_mssql(config, sql_string); }
“query_mssql()”调用你的函数。 如何将结果传递回顶部调用函数或错误返回?
为此,我相信你应该使用async.waterfall,因为你想传递每个asynchronous任务的结果。
下面是一个简单的例子。 你必须编辑它以适应你的需求。
如果在任务中发生错误,则会在最后移出可选方法。
async.waterfall([ function(callback) { var connection = new sql.Connection(config, function(err) { callback(err, connection) } ); }, function(connection, callback) { var request = connection.request(); request.query(sql_string, callback); } ], function(err, recordset) { // ... error checks should go here : // output query result to console: console.log(recordset); });
正如你所看到的,你可以在callback中的错误之后添加参数,然后在下一个任务中接收它们。 这是async.waterfall的一个function。
这是一个testing的例子,以及…
require("should"); var async = require("async"); describe("async test", function() { it('should do stuff', function(done){ async.waterfall([ function(callback){ a(callback); }, function(aResult, callback){ b(callback, aResult); } ], function(err, aResult, bResult) { console.log(aResult + " " + bResult); done(); }); function a(callback) { callback(null, 1); } function b(callback, aResult) { callback(null, aResult, 2); } }) });
至于你最后的编辑,你必须asynchronous返回你的值。 所以你不能使用return语句来获得你的结果。 这有一个涓滴效应,导致这些依赖关系也变得asynchronous。
- 创build多个dynamic对象NodeJs查询Mongodb
- 混合asynchronous操作(callback和承诺)完成后如何执行任务?
- 具有相同callback函数的多个请求asynchronous
- 在Node.JS中使用async / await进行适当的请求
- NodeJS +asynchronous:哪个控制stream选项select?
- Javascript:同步到asynchronous转换器库
- 节点:试图使用`asynchronousfunction`抛出错误
- 在使用Node.js完成之前,我可以开始发送Web响应吗?
- Node.JS:如何将variables传递给asynchronouscallback?