Typescript/Express中的变量有问题

Typescript/Express中的变量有问题,typescript,express,restapi,Typescript,Express,Restapi,我正在尝试使用TS和Express的RESTAPI。对于登录部分,我必须获得预生成的salt来加密密码并继续。 请看下面的代码: const{user,pwd}=req.body; 让盐:String=“”//宣布为空 let hash:String=“”//宣布为空 (等待DB).查询(“从sf_guard_用户中选择盐,其中用户名=?”,[user]) .then(功能(数据){ salt=数据[0]。salt; hash=crypto.createHash('sha1')。update(s

我正在尝试使用TS和Express的RESTAPI。对于登录部分,我必须获得预生成的
salt
来加密密码并继续。 请看下面的代码:

const{user,pwd}=req.body;
让盐:String=“”//宣布为空
let hash:String=“”//宣布为空
(等待DB).查询(“从sf_guard_用户中选择盐,其中用户名=?”,[user])
.then(功能(数据){
salt=数据[0]。salt;
hash=crypto.createHash('sha1')。update(salt+pwd)。digest('hex');
});
日志(salt、hash)//还空着
//...

如何在
查询之外访问这些值?

JavaScript本质上是异步的。根据您的程序判断,
console.log
将在
wait
ed功能完成之前运行。所以,解决这个问题的方法如下:

使用承诺(如示例中所示):

(wait DB).查询(“从sf_guard_用户中选择盐,其中用户名=?”,[user])
.then(功能(数据){
salt=数据[0]。salt;
hash=crypto.createHash('sha1')。update(salt+pwd)。digest('hex');
日志(salt、hash);
//在这里执行其余功能。。。
});
这将确保在异步功能完成后运行
控制台.log
。所有的
Promise
s/异步函数都是这样的

进一步阅读:


注意:在我看来,最好使用新的
async/await
而不是promissions,但有些情况下使用promissions处理得更好。

谢谢,我的会话方法已经是异步的,所以我只是将await添加到我的查询中并解决了问题。如果我的答案对您有帮助,请将其标记为已接受。谢谢