【问题标题】:Convert this Promise based code into Async / Await?将此基于 Promise 的代码转换为 Async / Await?
【发布时间】:2021-06-30 18:41:55
【问题描述】:

一位同事想将一个项目的后端代码重构为 Async/Await,我几乎没有使用过。

我知道它是如何工作的,但是一开始这样写代码有点奇怪。

router.post("/register", async (req, res) => {
  const { firstName, lastName, email, password } = req.body;

  bcrypt.hash(password, 10).then((hash) => {
    User.create({
      firstName: firstName,
      lastName: lastName,
      email: email,
      password: hash,
    });
    res.json("User created!");
  });
});

例如,您将如何重构这段简单的代码?谢谢!!!

【问题讨论】:

  • const hash = await bcrypt.hash(password, 10); 其余的应该是不言自明的
  • @JaromandaX 和then 中的整个代码被移到该行之后。
  • 嗯,是的,不言自明@VLAZ :p 特别是因为 OP 说“我知道它是如何工作的”
  • @JaromandaX 在我看到编辑后的评论之前写了评论。但我同意。

标签: javascript asynchronous async-await promise


【解决方案1】:

大概是这样的:

router.post("/register", async (req, res) => {
    const { firstName, lastName, email, password } = req.body;
    
    const hash = await bcrypt.hash(password, 10);
    User.create({
        firstName: firstName,
        lastName: lastName,
        email: email,
        password: hash,
    });
    res.json("User created!");
});

【讨论】:

    【解决方案2】:

    您可以通过在调用哈希函数时简单地添加等待来做到这一点

    router.post("/register", async (req, res) => {
      const { firstName, lastName, email, password } = req.body;
    
      try {
        const hash = await bcrypt.hash(password, 10);
        User.create({
          firstName: firstName,
          lastName: lastName,
          email: email,
          password: hash,
        });
      } catch (e) {
        // --- "your .catch() method would go here" ---
      }
    
      res.json("User created!");
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      相关资源
      最近更新 更多