我正在显示一个集合中的一堆页面,因此要在我的视图中显示它们,我会在locals
中初始化一个全局app.js
变量,如下所示:
Page.find({}).sort({ sorting : 1}).exec(function(err, pages){
if (err) {
console.log(err);
} else {
app.locals.pages = pages;
}
});
工作正常。但是,我也能够重新排序这些页面显示的方式,所以在我进行重新排序后,我在同一条路线上从上面重做Page.find()
,但似乎总是落后一步。
因此,如果我通过重新排序(让我们称之为reorder 1
)进行更改,那么app.locals.pages
之后我看不出有什么不同,但是如果我再次重新排序(让我们称之为reorder 2
},然后我看到reorder 1
排序,而不是reorder 2
依此类推,所以基本上它总是落后一步。
路线的相关代码:
for (var i = 0; i < ids.length; i++) {
var id = ids[i];
count++;
(function(count) {
Page.findById(id, function (err, page) {
page.sorting = count;
page.save(function (err) {
if (err)
console.log(err);
});
});
})(count);
}
Page.find({}).sort({sorting: 1}).exec(function (err, pages) { // this is always a step behind
if (err) {
console.log(err);
} else {
req.app.locals.pages = pages;
}
});
为什么不是最新的?
答案 0 :(得分:0)
Okey,然后我理解你的问题。
问题不是你的page.save
花费的时间多于for
所以在你的发现之后会得到几乎与以前相同的结果。
你在哪里使用它(for
)?在特殊的路线?
简单的异步javascript问题;)
```
function sortPages(ids, callback) {
var total = 0;
for (var i = 0; i < ids.length; i++) {
var id = ids[i];
count++;
(function(count) {
Page.findById(id, function (err, page) {
page.sorting = count;
page.save(function (err) {
++total;
if (err)
console.log(err);
if (total >= ids.length) {
callback('done');
}
});
});
})(count);
}
}
sortPages(ids, function () {
Page.find({}).sort({sorting: 1}).exec(function (err, pages) {
if (err) {
console.log(err);
} else {
req.app.locals.pages = pages;
}
});
});
```