gpt4 book ai didi

node.js - 如何同步 Node js 中加密模块的 crypto.randomBytes() 函数?

转载 作者:搜寻专家 更新时间:2023-11-01 00:19:52 25 4
gpt4 key购买 nike

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() 方法。所以我向函数添加了 asyncawait,但我没有得到预期的输出

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");
});

最佳答案

const crypto = require("crypto");
async function generateToken() {
const buffer = await new Promise((resolve, reject) => {
crypto.randomBytes(256, function(ex, buffer) {
if (ex) {
reject("error generating token");
}
resolve(buffer);
});
});
const token = crypto
.createHash("sha1")
.update(buffer)
.digest("hex");

console.log(token);
return token;
}

console.log("before token");
generateToken().then(token => {
console.log("after token", token);
});

你也可以在其他异步函数中调用它

async function otherFunction() {
try {
console.log("before token");
const token = await generateToken();
console.log("after token", token);
} catch (e) {
console.error(e)
}
}

关于node.js - 如何同步 Node js 中加密模块的 crypto.randomBytes() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51096273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com