我正在使用npm包“mssql” 为了打开连接。我必须这样做:在类初始化程序中为node.js解决回调问题
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不允许您将关键字“等待”放在那里。
我也用蓝鸟,asyncawait库,但是,它是很难拉平整个街区 和阶级“等待”初始化尤其是对第3行
如何处理这个问题?
对不起,我还是没有意识到问题是什么。你从SQL获得一个令牌;那么你想怎么做?什么具体阻止你这样做?还是仅仅是你不了解回调和延续传球的事实? – Amadan 2014-08-29 07:03:48
@Amadan我必须使用回调来传递'返回值',我发现没有任何工具可以等待第3行的块。因为我总是在调用这段代码后打印'undefined'值。我仍然不熟悉延续传球风格... – CodeFarmer 2014-08-29 07:19:26
你不能等。这不是节点的工作原理。将值赋给'callback',就像代码已经做的那样。忘记“返回”。 'return'只对你可以立即回馈的东西有用;如果你需要等待,那就是'callback'的作用。所有的异步库(async,await ...)只是简化了几个回调的同步,并不适用于你正在做的任何事情。 Tamejs实际上不是JavaScript。所以,我再次问:在“等待”之后你想做什么? “回报价值”不是一个答案,认为更大。你想要什么令牌? – Amadan 2014-08-29 07:23:50