使用ASYNC bcrypt.hash函数返回未定义,但可以很好地奏效。

发布于 2025-02-09 18:34:19 字数 687 浏览 2 评论 0 原文

这是带有异步的代码(返回未定义

userService.register = (username, password) => {
  return bcrypt.hash(password, saltRounds, async(err, hash) => {
    const newUser = new user({
      username: username,
      password: hash
    })
    return await newUser.save()
  })
}

,这是与的代码相同的代码。

userService.register = (username, password) => {
  return bcrypt.hash(password, saltRounds)
    .then(hash => {
      const newUser = new user({
        username: username,
        password: hash
      })
      return newUser.save()
    })
}

Here is the code with async (returns undefined)

userService.register = (username, password) => {
  return bcrypt.hash(password, saltRounds, async(err, hash) => {
    const newUser = new user({
      username: username,
      password: hash
    })
    return await newUser.save()
  })
}

and this is the same code with .then, it works correctly

userService.register = (username, password) => {
  return bcrypt.hash(password, saltRounds)
    .then(hash => {
      const newUser = new user({
        username: username,
        password: hash
      })
      return newUser.save()
    })
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叫嚣ゝ 2025-02-16 18:34:20

这是有记录的行为:

async方法可以接受呼叫,请在 callback


您在第一个示例中传递回调,那么 bcrypt 不会返回承诺。

编写代码的另一种方法是使包装函数 async

userService.register = async (username, password) => {
  const hash    = await bcrypt.hash(password, saltRounds);
  const newUser = new user({
    username: username,
    password: hash
  })
  return await newUser.save(); // or just `return newUser.save()`
}

This is documented behaviour:

Async methods that accept a callback, return a Promise when callback is not specified if Promise support is available

You're passing a callback in your first example, so bcrypt doesn't return a promise.

Another way to write your code is to make the wrapping function async:

userService.register = async (username, password) => {
  const hash    = await bcrypt.hash(password, saltRounds);
  const newUser = new user({
    username: username,
    password: hash
  })
  return await newUser.save(); // or just `return newUser.save()`
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文