我做了下面的函数,用于从ids中获取用户名。它不能很好地工作。我可以在查询函数中编写console.log(result.first_name);,用户名会显示在我的终端中,但不会出现在浏览器中。我试着在函数的末尾添加“return‘something’;”,看看它是否会在浏览器中显示出来--它确实出现了。如何编写函数返回查询结果?
函数(app.js中的全局函数)
function usernameFromId(id, callback){
db.users.findOne({ _id: ObjectId(id.toString()) }, function(err, result) {
var first_name = result.first_name;
console.log(first_name); // names show up in the console…
callback(first_name);
});
};页面处理程序(在app.js中)
app.get('/books', function(req, res){
function timeSince(dato){
moment.lang('nb');
return moment(dato).fromNow();
};
db.books.find().sort({ added:-1 }, function(err, docs) {
var books = docs;
db.activity.find().limit(9).sort({ time:-1 }, function(err, docs) {
var activity = docs;
res.render('books', {
books: books,
activity: activity,
timeSince: timeSince,
usernameFromId: usernameFromId
})
});
});
});模板(books.jade)
- each a in activity
p=usernameFromId(a.user_id, function(name){return name;})发布于 2012-04-25 21:15:10
好吧,我找到了一个解决方案。不知道它是不是很好,但它确实有效。不需要函数。
页面处理程序(在app.js中):
app.get('/books', function(req, res){
db.activity.find().limit(9).sort({ time:-1 }, function(err, docs) {
var activity = docs;
db.users.find(function(err, docs) {
var users = docs;
res.render('books', {
page_title:'books',
activity: activity,
users: users
})
});
});
});模板(books.jade):
- each a in activity
- for u in users
- if (a.user_id == u._id.toString())
| #{u.first_name}发布于 2012-04-24 08:23:04
不是,因为JavaScript的异步特性。我已经在您的代码中添加了一些注释,以指示实际的执行顺序。这就是你得到这个错误的原因。
function usernameFromId(id){
var id = id.toString(); // 1
db.users.findOne({ _id: ObjectId(id) }, function(err, result) {
var first_name = result.first_name; // 3
});
return first_name; // 2
};编辑:您可能需要类似以下内容的内容
function usernameFromId(id, callback){
var id = id.toString();
db.users.findOne({ _id: ObjectId(id) }, function(err, result) {
var first_name = result.first_name;
callback(first_name);
});
};https://stackoverflow.com/questions/10289656
复制相似问题