1
我知道this問題有幾乎相同的標題,但問題是不同的。玉模板沒有得到從快遞傳遞的數據
我使用內置於最新的Keystone.js發行版中的Jade模板引擎v.1.11.0。在一個控制器中,我用兩個view.on('init')回調查詢數據。第一個回叫只查詢一條記錄並且總是通過。第二個有時不。
category.js
var keystone = require('keystone');
var async = require('async');
exports = module.exports = function (req, res) {
var view = new keystone.View(req, res);
var locals = res.locals;
// Init locals
locals.section = 'category';
locals.filters = {
category: req.params.category
};
locals.data = {
sections: [],
category: {}
};
// Load current category
view.on('init', function (next) {
var q = keystone.list('Category').model.findOne({
key: locals.filters.category
});
q.exec(function (err, result) {
locals.data.category = result;
locals.section = locals.data.category.name.toLowerCase();
next(err);
});
});
// Load sections
view.on('init', function (next) {
var q = keystone.list('Section').model.find().where('category').in([locals.data.category]).sort('sortOrder').exec(function(err, results) {
if (err || !results.length) {
return next(err);
}
async.each(results, function(section, next) {
keystone.list('Article').model.find().where('section').in([section.id]).sort('sortOrder').exec(function(err, articles){
var s = section;
if (articles.length) {
s.articles = articles;
locals.data.sections.push(s);
} else {
locals.data.sections.push(s);
}
});
}, function(err) {
console.log(locals.data.sections);
});
next(err);
});
});
view.render('category');
};
在我看來,我應該總是得到這樣過去了:
sections: { _id: 574b909b43ff68163ed86bf2, publicTitle: 'Title 1', key: 'name-1', sortOrder: 3, name: 'Name 1', __v: 0, category: 574b8960947f45f034ac89b4, text: '', image: {} }
category: { _id: 574b8960947f45f034ac89b4, key: 'blabla', sortOrder: 1, name: 'Blabla', __v: 0, image: {} }
但是60%的時候,我得到這個:
sections:
category: { _id: 574b8960947f45f034ac89b4, key: 'johndoe', sortOrder: 1, name: 'JohnDoe', __v: 0, image: {} }
奇怪的是,如果我去另一個類別,其中有條更多條款和30條條款,我在90%的時間內獲得了部分內容,但仍然錯過了10%。這在開發和生產中都存在。
有些「下一個()」發射得太早?我看不到我弄亂了什麼。
嘗試在1個init中嵌套查詢。 – Darren
我從一開始就試過,出於某種原因,如果我這樣做,它會使頁面永久加載。另外有兩個inits似乎沒有問題,這種方法被廣泛用於keystone,甚至在樣板中。 –
我還被建議嘗試下一步(犯錯);在異步回調中,它也會導致永久加載。 –