Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node';s crypto.pbkdf2()应该工作吗?_Javascript_Node.js_Typescript_Callback - Fatal编程技术网

Javascript Node';s crypto.pbkdf2()应该工作吗?

Javascript Node';s crypto.pbkdf2()应该工作吗?,javascript,node.js,typescript,callback,Javascript,Node.js,Typescript,Callback,关于节点加密模块的pbkdf2()函数,我已经阅读了很多文档。我之前提出的一个问题没有经过深思熟虑就被打断了——所以让我这么说:我认为我对回调缺乏了解——但我已经阅读了许多试图真正理解回调的参考资料——YDKJS Async,MDN,O'Reilly的“Learning JavaScript” 我在回调中的else子句中有一个console.log语句,它适当地记录了日志,因此我确信回调正在执行,尽管我的调试程序(在VSCode中)没有停止执行 我尝试了两种不同的方法,如下面的代码所示:一种是在

关于节点加密模块的pbkdf2()函数,我已经阅读了很多文档。我之前提出的一个问题没有经过深思熟虑就被打断了——所以让我这么说:我认为我对回调缺乏了解——但我已经阅读了许多试图真正理解回调的参考资料——YDKJS Async,MDN,O'Reilly的“Learning JavaScript”

我在回调中的else子句中有一个console.log语句,它适当地记录了日志,因此我确信回调正在执行,尽管我的调试程序(在VSCode中)没有停止执行

我尝试了两种不同的方法,如下面的代码所示:一种是在else子句中声明一个变量并将其值更改为derivedKey.toString('hex'),另一种是返回derivedKey.toString('hex')。两者都不起作用

我尝试链接then子句,但crypto.pbkdf2返回void并且“property”then“在类型“void”上不存在”

以下是书面方法:

private静态异步hashPassword(密码:string,salt:string):Promise{
var hashedPassword;
常数迭代=50000;
常数keylen=64;
常量摘要='sha512';
const possibleReturnedValue=wait crypto.pbkdf2(密码、salt、迭代、keylen、摘要、(err、derivedKey)=>{
if(err){throw err;}
否则{
console.log(derivedKey.toString('hex'));
console.log(“嘿,现在”);
hashedPassword=derivedKey.toString('hex');
返回derivedKey.toString('hex');
}
})
返回hashedPassword;

}
您的问题是
crypto.pbkdf2
函数有点旧,不适用于承诺,而是使用回调。因此,为了在现代异步代码中使用该函数,有必要将该函数包装在
Promise
对象中

关键思想是调用promise的构造函数在回调中给出的
resolve
reject
函数

重构以返回承诺,您的函数将如下所示:

函数hashPassword(密码:string,salt:string):承诺{
返回新承诺((解决、拒绝)=>{
常数迭代=50000;
常数keylen=64;
常量摘要='sha512';
pbkdf2(密码,salt,迭代,keylen,摘要,(err,key)=>{
如果(错误){
拒绝(错误);
}否则{
解析(key.toString('hex'));
}
})
});
}