应该是一个相当简单快速的问题,因为我是使用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');
}
});
我需要在每一行上等待以使代码功能相同是否正确?我担心我在不需要的地方使用了等待。
答案 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>
。如果函数返回“正常”值(string
,number
,Object
等),则多余的await
仍将起作用,但不需要。
答案 2 :(得分:0)
您不需要在每个函数调用之前都等待,只有异步的并返回promise的等待。
假设行User.create(createUserObject(user))
是唯一的异步调用,那应该是唯一需要await
的行。
另一方面,在每个函数调用前都放置await可能不会损害代码,除了使代码看起来更混乱之外。