const crypto = require('crypto');
async function getKey(byteSize) {
let key = await crypto.randomBytes(byteSize);
return key;
}
async function g() {
let key = await getKey(12);
return key;
}
console.log(g());
console.log('hello - want this called after g() above');
我已经呆了一个小时了,我不明白如何确保使用异步/等待来获取密钥。无论我做什么,我都会得到一个未决的承诺。
我也尝试过这个:
async function getKey(byteSize) {
let key = await crypto.randomBytes(byteSize);
return key;
}
getKey(12).then((result) => { console.log(result) })
console.log('hello');
...无济于事!哪一个是受启发的:如何将await与promisify用于crypto.randomBytes?
谁能帮我这个?
我要做的就是让randomBytes异步。使用async./await块,但在我继续执行代码之前,请确保它满足了诺言。
这是我对问题的评论的扩展
由于您没有承诺或向其传递回调
crypto.randomBytes()
是同步的,因此您无法等待它。此外,您没有适当地等待g()
顶层返回的承诺。这就是为什么您总是在您的订单中看到待处理的Promiseconsole.log()
您可以使用util.promisify()
将其转换crypto.randomBytes()
为一个Promise返回函数并等待它。async/await
在您的示例中,不需要使用,因为所做的只是用承诺包装承诺。
const { promisify } = require('util')
const randomBytesAsync = promisify(require('crypto').randomBytes)
function getKey (size) {
return randomBytesAsync(size)
}
// This will print the Buffer returned from crypto.randomBytes()
getKey(16)
.then(key => console.log(key))
如果要getKey()
在async/await
样式函数中使用它,将像这样使用
async function doSomethingWithKey () {
let result
const key = await getKey(16)
// do something with key
return result
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句