解决node.js类初始值设定项上的回调地狱
solve callback hell on class initializer for node.js
我正在使用npm包"mssql"为了打开连接。我必须做:
var getOneToken = function (callback) {
var token = "";
var connection = new sql.Connection(dbConfig, function(err){ //<-----line 3
if(err) console.log(err);
var sqlrequest = new sql.Request(connection);
sqlrequest.query('select top 1 [accessToken] from AccessToken', function(err, recordset){
if(err) console.log(err);
token = recordset[0]['accessToken'];
connection.close();
callback(token);
})
});
//how to await the whole block at the top and prevent early execution of code afterwards.
};
此块中的代码需要延迟,直到数据库返回结果,即令牌。然后可以进行进一步的操作。
我不知道如何等待代码。
自从我尝试过:
connection = await { new sql.Connection(dbConfig, defer (var err)) }
它失败了。因为tamejs不允许将关键字'await'放在那里。
我也使用bluebird,asyncawait库,但是,很难压平整个块和类初始化时的"等待",特别是对于第3行。
如何处理这个问题?
function sqlConnect(dbConfig, cb) {
var conn = new sql.Connection(dbConfig);
conn.connect(function (err) {
cb(err, conn);
});
}
用法:
sqlConnect(dbConfig, function (err, conn) {
// do your stuff here
});
或者使用tamejs:
var err, conn;
await { sqlConnect(dbConfig, defer(err, conn); }
// do your stuff here
要布局回调,您可能还需要查看异步
更新:如果您只想避免回调链,则不需要提取新的函数来建立连接。相反,你可以这样重写你的函数:
var getOneToken = function (dbConfig, cb) {
var err, recordset;
var token = "";
var conn = new sql.Connection(dbConfig);
await { conn.connect(defer(err)); }
if (err) {
console.log(err);
cb(token);
return;
}
var request = new sql.Request(conn);
await { request.query('select top 1 [accessToken] from AccessToken', defer(err, recordset)); }
if (err) {
console.log(err);
} else {
token = recordset[0]['accessToken'];
}
conn.close();
cb(token);
};
相关文章:
- 在另一个Find(..)的回调内部查找,如何逃离回调地狱
- 分解回调地狱如何传递值
- 使用其他模块中的函数,避免异步回调地狱
- 回调地狱,地理位置-JavaScript
- 如何使用promise来避免回调地狱
- 节点,异步编程,回调地狱
- 我如何使用承诺重构这个回调地狱
- Javascript异步回调地狱
- 包装现有的API'在承诺避免“;回调地狱”;
- Phantom.js回调在Node.js/Express.js上重构Phantom.js时引用错误;回调地狱”;
- 避免nodeJs中的回调地狱/将变量传递给内部函数
- 回调地狱与承诺
- 解决node.js类初始值设定项上的回调地狱
- 如何在一次AJAX调用后避免回调地狱
- 避免回调地狱.流星.叫承诺
- Nodejs异步编程——为什么有“async"模块需要吗?什么是“回调地狱”/“末日金字塔”
- Nodejs:处理多个Promise回调(回调地狱)
- 模块化如何在技术上解决nodejs中的回调地狱?
- 如何将回调地狱重写为承诺
- 迷失在回调地狱与Node, Express和谷歌分析API