代码就是这个
module.exports = {
index: function (req, res, next) {
//get an array of all users in user collection
Notification.find(function foundNotification(err, notifications) {
if (err) return next(err);
var elusuario=[];
User.findOne(2, function foundUser (err, user) {
if (err) return next(err);
if (!user) return next();
console.log(user);
console.log("----------------------------");
elusuario = user;
console.log(elusuario);
});
res.view({
notifications: notifications,
elusuario: elusuario
});
})
}
};
这是控制器,在控制台中打印elusuario很好,但在视图中用户没有值。为什么? 我认为是与全局变量相关的东西。但我不知道 感谢
修改
好的,所以方法是异步的。我试图做的是通过她的user.id找到通知和用户,并获取user.name,如果我这样做
module.exports = {
index: function (req, res, next) {
//get an array of all users in user collection
Notification.find(function foundNotification(err, notifications) {
if (err) return next(err);
User.find(function foundUser (err, users) {
if (err) return next(err);
var usuarios_locotes = [];
_.each(notifications, function (notification) {
_.each(users, function (user) {
if(notification.token_user==user.token){
console.log(user.token);
usuarios_locotes.push(user);
console.log(usuarios_locotes);
};
});
});
res.view({
notifications: notifications,
users: usuarios_locotes
});
});
})
}
};
它仍然无法正常工作? __。每个都是异步函数? 抱歉所有这些可能是愚蠢的问题答案 0 :(得分:1)
代码运行时,在调用foundNotification
之前不会执行函数res.view
。我对你的建议是关于Promises的。
您可以按照以下方式更改代码:
function (req, res, next) {
//get an array of all users in user collection
Notification.find(function foundNotification(err, notifications) {
if (err) return next(err);
var elusuario=[];
User.findOne(2, function foundUser (err, user) {
if (err) return next(err);
if (!user) return next();
console.log(user);
console.log("----------------------------");
elusuario = user;
console.log(elusuario);
res.view({
notifications: notifications,
elusuario: elusuario
});
});
});
}
答案 1 :(得分:1)
Runtime Error Message:
Line 13: java.lang.ArrayIndexOutOfBoundsException: 1
Last executed input:
[[1,2,3,4,5,6,7,8,9,10]]
对象的方法findOne
以异步方式运行。因此,您在User
返回用户对象之前呈现视图。
如果您在findOne
之前加console.log
,则会在render.view
内console.log
方法之前打印输出。
答案 2 :(得分:0)
答案 3 :(得分:0)
好吧......首先,非常感谢大家。我解决了这个问题。
我知道这不是正确的方法,但它有效,所以对我的建议没关系。
编辑之后的问题是在视图中我试图用参数写一个对象,但我发送的是矢量矢量,所以改变这一行:
usuarios_locotes.push(new Object(users[h]));
我可以发送一个对象矢量。
所以..无论如何,谢谢你以后我会改变我的代码来做得更好更有效
这是我的第一篇文章,很抱歉没有阅读如何使用这个哈哈的第一步,因为我认为我犯了很多错误。
对不起我的英语:C