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 });
});
我正在尝试创建一个 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 });
});