我有这个小提琴,说明我想做什么,它按预期工作: https://jsfiddle.net/mbLwsnak/
它所做的就是遍历一个对象数组,并添加一个键值对。
我的节点应用程序中有相同的代码,但它不起作用。即使代码几乎相同,新对也不会添加到对象中,因此我认为它必须是上下文。
Schema.find()
.then(function(currencydata){
var data = currencydata;
data.forEach(function(obj){
obj.thing = "Thing";
})
console.log(data);
mdata.currencydata = data;
})
.then(function(result){
res.render('index', mdata);
})
因此,我能想到的唯一不同之处在于,这一切都在异步函数中。我甚至尝试将日志放在setTimeout中,以防异步,但没有变化。
编辑: currencydata是由mongoose模式返回的对象数组。它看起来像这样:
[{
country: 'Canada',
currency: 'CAD',
cost: 5.98,
exchangerate: 1.33,
value: -10.9
}, {
country: 'United States',
currency: 'USD',
cost: 5.06,
exchangerate: 1,
value: 0
}, {
country: 'India',
currency: 'INR',
cost: 170,
exchangerate: 68.33,
value: -50.8
}]
答案 0 :(得分:0)
使用lean()将mongoose文档转换为普通的javascript 对象
然后在第一个然后()你需要返回一个承诺,以便 next then()将获得返回值。
在promise对象中,解析和拒绝函数在被调用时,分别解析或拒绝承诺。 Promise Reference
Schema.find()
.lean()
.then((currencydata, err) => {
return new Promise((resolve, reject) => {
currencydata.forEach(data => {
data.thing = 'Thing';
});
resolve(currencydata);
});
})
.then((newdata, err) => {
res.render('index', newdata);
});