Javascript回调函数不修改数组

Javascript callback function doesn't modify array

我正在尝试创建一个 to-do list page,并且我从 mongodb database 中读取了项目,当我 console.log(item) inside callback function,它打印每一项。

但是当我 console.log(items) 查找函数之外时,它显示为空,因此我无法显示任何项目。为什么项目数组为空?

app.get("/", (req, res) => {
    var items = [];
    Item.find({}, function(err, results) {
        results.forEach(function(item) {
            console.log(item);
            items.push(item);
        });
    });
    console.log(items);
    res.render("list", { listTitle: "Today", newListItem: items });
});

问题

发生这种情况是因为 Item.find() 是异步的,并且在 console.log(items)res.render() 运行

之前不会将任何内容推入 items

解决方案

  • 将你的 res.render() 移动到 Item.find() 回调函数中
  • 使用Async/Await

有回调

app.get("/", (req, res) => {
    var items = [];
    Item.find({}, function(err, results) {
        results.forEach(function(item) {
            console.log(item);
            items.push(item);
        });
        console.log(items);
       res.render("list", { listTitle: "Today", newListItem: items });
    });
    
});

与Async/Awaits

app.get("/", async (req, res) => {
    var items = [];
    const results = await Item.find()
    results.forEach(function(item) {
       console.log(item);
       items.push(item);
    });
    console.log(items);
    res.render("list", { listTitle: "Today", newListItem: items });
});