如何在Node.js中使用crypto.randomBytes使用异步/等待?

加里
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章