循环中的MongoDB被跳过(Node.js)
MongoDB in loop get skipped (Node.js)
很抱歉问noob问题(以下代码与express框架和mongoose DB相关)
我试图循环遍历包含用户名的数组"Users",然后尝试在猫鼬数据库中匹配它们,以获得每个用户的学校和分数。然后将它们组合到名为UsersInfoFinal的最终数组中。
var Users = ['peter', 'john'];
var UsersInfoFinal = [];
for (i = 0; i < Users.length; i++){
userModel.findOne ({username: Users[i]}, 'username school grade', function (error, UserInfo) {
UsersInfoFinal .push([UserInfo.username, UserInfo.school, UserInfo.grade]);
});
}
console.log(UsersInfoFinal );
控制台应该打印[[peter, MIT, 95], [john, Royal Academy, 89]]
,但是控制台仍然打印[]
,变量UsersInfoFinal没有修改。
为什么?有没有办法在循环后修改变量?请帮忙,我真的是node.js和MongoDB的新手,已经被困了几个小时:S
谢谢!
这里我将为您提供一个非常简单的模式,用于此类情况。试试这个代码:
var Users = ['peter', 'john'];
var UsersInfoFinal = [];
var usersWaiting = 0;
function allDone() {
console.log(UsersInfoFinal);
}
for (i = 0; i < Users.length; i++){
usersWaiting++;
userModel.findOne ({username: Users[i]}, 'username school grade', function (error, UserInfo) {
usersWaiting--;
UsersInfoFinal .push([UserInfo.username, UserInfo.school, UserInfo.grade]);
if (usersWaiting == 0) {
allDone();
}
});
}
这是在ecmascript环境中管理多个异步调用的一种非常常见的模式。也许有更好的方法,但它确实能完成任务。
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 如何使用 node.js 比较两个 json 数组
- Node.js's Buffer.writeFloatBE in Javascript
- node.js:setInterval()正在跳过调用
- 如何处理node.js节点mongodb中的连接和查询队列
- Node.js正在更改应用程序以使用集群模块
- 如何使用Node.js最有效地解析网页
- 在openshift node js应用程序中获取请求
- 正在删除node.js中已验证的网站
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js中的JavaScript原型对象效率
- node.js请求数据事件未在CORS ajax调用中触发
- 使用node.js制作网站
- 使用node.js服务器中的evernote api获取note内容
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 在Node.js中上传和检索图像
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 如何使用 Node JS 获取 JSON 嵌套数组值