【发布时间】:2020-07-17 08:37:47
【问题描述】:
crypto = require('crypto')
async function generateToken(){
await crypto.randomBytes(256,function(ex, buffer) {
if (ex) {
console.log("error generating token");
}
var token = crypto
.createHash('sha1')
.update(buffer)
.digest('hex');
console.log(token);
}
)}
console.log("before token");
generateToken();
console.log("after token");
在上面的代码中,我想同步generateToken()方法。所以我在函数中添加了async 和await,但我没有得到预期的输出
before token
7f4f27037cd7dd65bd03d7e2fe859e608b9eebe2
after token
我得到的输出是
before token
after token
7f4f27037cd7dd65bd03d7e2fe859e608b9eebe2
我在上面的代码中做错了什么?
编辑: 以下代码可以工作,但不同步。
crypto = require("crypto");
function generateToken() {
return new Promise((resolve, reject) => {
crypto.randomBytes(256, function(ex, buffer) {
if (ex) {
reject("error generating token");
}
const token = crypto
.createHash("sha1")
.update(buffer)
.digest("hex");
resolve(token);
});
});
console.log(token);
}
console.log("before token");
generateToken().then((token) => {
console.log(token);
console.log("after token");
});
【问题讨论】:
-
下面的答案总结了它,当您调用 generateToken() 时,它不会阻塞,因此控制台日志语句完全符合您的预期。
标签: node.js async-await