将诺言转换为等待/异步

时间:2019-11-18 20:08:11

标签: javascript node.js

应该是一个相当简单快速的问题,因为我是使用Promises和await / async的新手

这是我对Promises的原始功能。 (我希望在创建用户之后发生res.send和res.redirect)

router.post('/add', (req, res) => {
  const user = req.body.user;
  if (user.email && user.username && user.password) {
    User.create(createUserObject(user)).then(
    res.send(user);
    res.redirect('/login'));
  }
});

这是我使用await / async的新功能。

router.post('/add', async (req, res) => {
  const user = req.body.user;
  if (user.email && user.username && user.password) {
    await User.create(createUserObject(user));
    await res.send(user);
    await res.redirect('/login');
  }
});

我需要在每一行上等待以使代码功能相同是否正确?我担心我在不需要的地方使用了等待。

3 个答案:

答案 0 :(得分:2)

我认为这应该有效

   router.post('/add', async (req, res) => {
      const user = req.body.user;
      if (user.email && user.username && user.password) {
        await User.create(createUserObject(user));
        res.send(user);
        res.redirect('/login');
      }
    });

唯一等待的事情是等待用户添加到数据库中。因此,无论您在何处等待,通常都会得到承诺。在那可以使用await。

答案 1 :(得分:0)

  

我需要在每一行上等待以使代码功能相同是否正确?

不。您可以做,但是您不需要

仅在函数返回await时才需要使用Promise<T>。如果函数返回“正常”值(stringnumberObject等),则多余的await仍将起作用,但不需要。

答案 2 :(得分:0)

您不需要在每个函数调用之前都等待,只有异步的并返回promise的等待。

假设行User.create(createUserObject(user))是唯一的异步调用,那应该是唯一需要await的行。

另一方面,在每个函数调用前都放置await可能不会损害代码,除了使代码看起来更混乱之外。