每当我尝试从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.randomBytes(64).toString('hex');
}
答案 0 :(得分:1)
默认情况下,异步函数返回一个Promise。请在另一个异步函数中调用await createCode()或使用createCode()。then()
答案 1 :(得分:0)
所有异步函数都返回一个Promise。总是。
因此,异步函数的调用者必须自己使用await
(从另一个async
函数内部)或使用.then()
才能使价值超出承诺。
在我看来,您的任何一个功能都不会从异步中受益。 return await someFunc()
返回someFunc()
时,只需return someFunc()
就可以完成承诺。 await
完全没有必要。
仅供参考,crypto.randomBytes()
如果需要异步版本,请使用回调。如果您不向其传递回调,那么它只是一个普通的同步函数。除非您做了一些使该库的承诺版本的工作,否则它不会返回承诺。
因此,您可以使用此功能:
// another one for example
function createCode(){
return crypto.randomBytes(64).toString('hex');
}
您可以将其作为常规函数调用
let randomVal = createCode();
console.log(randomVal);
如果您想要异步版本并希望与promises一起使用,那么您将不得不承诺它:
// 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);
});