使用异步等待时出现“错误:未向 pbkdf2 提供回调”

Dan*_*ari 2 pbkdf2 node.js async-await

我想使用 Nodejs 中的加密模块为 pbkdf2 密码哈希编写一个异步函数。虽然 randomBytes 函数工作正常,但在使用 await 运行 pbkdf2 时出现以下错误:“错误:没有提供给 pbkdf2 的回调”。

我知道一种解决方法可能是使用 pbkdf2Sync() 但我不明白为什么异步版本不起作用或者等待同步功能是否正确?

节点 v 8.10.0

async function hashPassword(password){
	let salt;
	let hash;
	let pass;
	try{
		salt = await Crypto.randomBytes(Config.SALT_BYTES);
		hash = await Crypto.pbkdf2(password, salt, Config.ITERATIONS, Config.HASH_BYTES, 'sha512');
		pass = salt+hash;
		return pass;
	}
	catch(err){
		console.log('ERR: ', err);
	}
}
Run Code Online (Sandbox Code Playgroud)

小智 6

一种解决方案是将方法包装在承诺中。任何需要回调的方法都可以通过这种方式转换为支持 async/await 的方法。

function pbkdf2Async(password, salt, iterations, keylen, digest) {
    return new Promise( (res, rej) => {
        crypto.pbkdf2(password, salt, iterations, keylen, digest, (err, key) => {
            err ? rej(err) : res(key);
        });
    });
}
Run Code Online (Sandbox Code Playgroud)