Javascript 正在尝试将key:value对添加到res.locals.object不工作(Node/Express)

Javascript 正在尝试将key:value对添加到res.locals.object不工作(Node/Express),javascript,node.js,mongodb,express,object,Javascript,Node.js,Mongodb,Express,Object,我正在尝试使用next()中间件,通过多个MongoDB操作构建一个res.locals对象 一旦我向res.locals添加了一个对象,例如:res.locals.newObject,接下来我想向新对象添加更多的{key:values} 像这样: for(let i=0; i<res.locals.surveys.length; i++){ await Answer.countDocuments({question_oid: {$in: res.locals.surveys[i]

我正在尝试使用
next()
中间件,通过多个MongoDB操作构建一个
res.locals
对象

一旦我向
res.locals
添加了一个对象,例如:
res.locals.newObject
,接下来我想向
新对象添加更多的
{key:values}

像这样:

for(let i=0; i<res.locals.surveys.length; i++){
    await Answer.countDocuments({question_oid: {$in: res.locals.surveys[i].questions}).then((result) => {

        res.locals.surveys[i]["count_answers"] = result;
    })
}

但这也不起作用。res.locals对象有什么诀窍吗?

除非使用async/await,否则不能在异步调用中使用for循环。我建议您进一步了解异步代码及其含义。网上有许多可用的资源

如果您使用的是async wait,请按以下方式修改代码

const result = await Answer.countDocuments({question_oid: {$in: res.locals.surveys[i].questions});
res.locals.surveys[i]["count_answers"] = result;

谢谢,你说得对。但这解决了一个不同的问题。在这个问题上的问题是要添加新的<代码> { CurtTyRe答复:结果} /Cult>到<代码> RES.Loals.调查对象,您必须考虑事件的顺序。首先循环执行并完成,然后请求处理程序的其余部分可能完成并写入响应。然后将执行移交给等待的异步任务,并执行计数文档的调用。只有到那时,回调才会进入并尝试分配到一个现在超出其请求处理程序范围的变量。好的,我用
wait
更新了这个问题。然而,它并没有解决我的问题。作为测试,我尝试在循环外部分配
res.locals.count=0
,然后在循环内部重新分配Mongo结果,结果成功了。但是,当我试图将Mongo结果指定为循环中的
res.locals.object.key
时,它没有起作用。。。所以我认为这与
res.locals.object
不接受赋值有关。
const result = await Answer.countDocuments({question_oid: {$in: res.locals.surveys[i].questions});
res.locals.surveys[i]["count_answers"] = result;