Node.js 退货承诺
每当我试图从crypto或nanoid(新库)生成随机密钥时,它只返回[object Promise]Node.js 退货承诺,node.js,object,promise,return,Node.js,Object,Promise,Return,每当我试图从crypto或nanoid(新库)生成随机密钥时,它只返回[object Promise] async function createCode(length){ if(!length){ return nanoid; } else { return nanoid(length); } } // another one for example async function createCode(){ return await crypto.random
async function createCode(length){
if(!length){
return nanoid;
} else {
return nanoid(length);
}
}
// another one for example
async function createCode(){
return await crypto.randomBytes(64).toString('hex');
}
默认情况下,异步函数返回承诺。请在另一个异步函数中调用wait createCode(),或使用createCode()。然后()所有异步函数返回一个承诺。总是 因此,异步函数的调用方必须使用
等待
自身(从另一个异步
函数中)或使用.then()
从承诺中获取值
在我看来,这两个函数都没有从异步中获益return wait someFunc()
当someFunc()
返回时,可以使用相同的return someFunc()
来完成承诺。根本不需要等待
仅供参考,crypto.randomBytes()
如果需要异步版本,将使用回调。如果不向它传递回调,那么它只是一个普通的同步函数。除非您已经做了一些事情来制作该库的预期版本,否则它不会返回承诺
所以,你可以用这个:
// another one for example
function createCode(){
return crypto.randomBytes(64).toString('hex');
}
您可以将其作为常规函数调用:
let randomVal = createCode();
console.log(randomVal);
如果您想要异步版本并希望将其与承诺一起使用,那么您必须承诺:
// another one for example
function createCode(){
return new Promise((resolve, reject) => {
crypto.randomBytes(64, function(err, val) {
if (err) return reject(err);
resolve(val.toString('hex'));
});
});
}
然后,你可以称之为:
createCode().then(val => {
console.log(val);
}).catch(err => {
console.log(err);
});