javascript - 为什么我不能将 javascript 变量设置为 false?

标签 javascript variables boolean

出于某种原因,我的 ArticleExists 变量不会在第 6 行设置为 true,尽管我使用控制台日志来确认它包含的 if 语句是否正确触发。

app.post("/articles", function(req, res) {
  let articleExists = (false);
  Article.find(function(err, results) {
    results.forEach(function(result) {
      if (result.title === req.body.title) {
        articleExists = (true);
      }
    });
  });
  if (articleExists) {
    res.send("Article already exists!")
  } else {
    const newArticle = new Article({
      title: req.body.title,
      content: req.body.content
    });
    newArticle.save(function(err) {
      if (err) {
        res.send(err);
      } else {
        res.send("Article saved successfuly")
      }
    });
  }
});

最佳答案

我认为这种情况可能是由于对nodejs异步性质的误解造成的。

我建议您稍微研究一下 Promises 和 Async/Await,它们在当前的 Nodejs 版本中可用,这使得代码更加清晰且更易于理解。

这篇文章似乎解释得很好:https://codeburst.io/javascript-es-2017-learn-async-await-by-example-48acc58bad65

关于您的问题,这是一个未经测试且不优雅的解决方案,希望对您有所帮助:

app.post("/articles", async (req, res) => {
    const results = await Article.find(query);
    const articleExists = results.some(result => result.title === req.body.title),
    if (articleExists) {
        return res.send("Article already exists!")
    }
    const newArticle = new Article({
        title: req.body.title,
        content: req.body.content
      });
    newArticle.save(err => {
      if (err) {
        return res.send(err);
      } else {
        return res.send("Article saved successfuly")
      }
    });
});

关于javascript - 为什么我不能将 javascript 变量设置为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61393294/

相关文章:

javascript - 自定义 D3.js 圆环图

javascript - 使用javascript将所选项目移动到多个选择的顶部

java - 执行方法时 boolean 值不保留值

javascript - React JS 中的条件渲染问题

javascript - 用于动态加载 CSS 的 CSP

mysql - 为什么变量没有被传递?

python - 从已经定义的变量中打印颜色

c++ - 如果我尝试在 C++ 中将大于 pow(2,64)-1 的值分配给 unsigned long long 会怎样?

javascript - boolean 逻辑,如果 4 中 1 为 true,则为 true

c# - 单元测试是否可以通过接受 boolean 值作为开关来执行双重任务,或者我应该编写两个单独的测试来复制测试代码吗?