javascript - 尽管有 ES6,是否存在 var 是最适合使用的关键字的情况?

标签 javascript ecmascript-6 async-await syntax-error

我会尽量让这个简洁......

随着 ES6 的大肆宣传,我觉得使用 var 关键字越来越受到整个 JS 社区的反对。由于这种(感知到的)普遍共识,我已经养成了避免使用 var 代替较新的 constlet 的习惯创建变量的关键字。

下面是我编写的代码块示例,其中我无法使用 const 因为我想重新定义一个变量。我还使用了 async/await,所以所有代码都在同一个 block-level scope 中,这显然会阻止您重新定义 let 变量.所以我唯一的选择是使用 var(或创建另一个 let 变量)。

这是代码。通过 Mongoose 将新用户帐户保存到 MongoDB 中...

router.post('/signup', async (req, res, next) => {
  const { email, password } = req.body;

  const user = await userModel.findOne({ email });
  if (user) { res.send('Email already in use.'); return; }

  // here is where the issue occurs - use var instead?
  let newUser = new userModel({ email, password });
  let newUser = await newUser.save();

  console.log(newUser); // just checking everything works

  res.send({ message: 'New user account created!' });
});

MDN 仅用一句话就提到了这种行为!那没有用。 :( 然后他们继续讨论提升行为,这不是我的问题,或者至少我看不出这有什么关系。MDN Source Here

所以总而言之...

  • 这是 var 最适合使用的关键字的例子吗?

  • 如果现在不是使用 var 的时候,是否有 任何 var 是最合适的关键字的实例使用,即使在 ES6 时代(7、8 等)?

免责声明:我知道我并非绝对需要保存这些变量,但在我看来,值得权衡的是编写稍微更冗长但也更易读和理解的代码。我可以使用 var,我只是觉得这是一个有趣的案例。

最佳答案

没有理由在 ES6 中使用 varconst 应该是你的默认值。使用 let 而不是 const 的唯一原因是当你想稍后在同一 block 中重新分配变量时。在这种情况下,您无需再次声明它,只需为其分配新值即可:

let newUser = new userModel({ email, password });
newUser = await newUser.save();
// allowed to reassign because `newUser` is not `const`

根据 save 的作用,我想你可以这样做:

const newUser = new userModel({ email, password });
await newUser.save();

newUser.save(); 应该拒绝它在保存失败时返回的 Promise,await 将转换为抛出的错误。所以在await之后的代码中应该没有保存成功与否的问题。如果达到这些行,则保存成功。

关于javascript - 尽管有 ES6,是否存在 var 是最适合使用的关键字的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50147411/

相关文章:

javascript - 如何使用 If 语句在 Javascript 中对不同 ID 使用相同的函数

javascript - JavaScript 生成器中yield 返回值的解析

c# - 通过 ASP.NET Web API 有效地使用 async/await

reactjs - 从 API React 映射对象数组

javascript - 在函数调用中解构赋值,同时保留对象

c# - VS 2010 是否允许我在 C# 中使用新的 async 和 await 关键字?

javascript - 跨站点脚本 Iframe 权限被拒绝问题

javascript - Jquery中的调用函数

javascript - 解析 <iframe> 中网站的 HTML 标签

javascript - Typescript - 将拆分后的字符串推送到数组