Mongoose findOne范围存疑
Mongoose findOne scope doubts
我是javascript的新手,对猫鼬的"find"scope有一些疑问。
我写了下面的代码试图理解这个问题。
下面的代码搜索一个Shopping集合,然后搜索分配给此Shopping的Stores。
storeMap是storeId=>storeObject的hashmap,但当Store.findOne作用域结束时,storeMap似乎会回滚到一个空数组。。。
var storeMap = {};
Shopping.findOne({ name: shoppingName }, function(err, shopping){
shopping.stores.forEach(function(storeId) {
Store.findOne({_id: storeId}, function(err, store) {
if(err) console.log(err);
console.log(store); //prints out store data
storeMap[storeId] = store;
console.log(storeMap); //prints out store data
});
console.log(storeMap); //prints out an empty array
});
});
那么,为什么我的storeMap数组打印的是空数组而不是存储数组呢?
Store.findOne
和node.js中的许多东西一样,是异步的,并接受回调。您的回调是设置storeMap
的位置:
function(err, store) {
if(err) console.log(err);
console.log(store); //prints out store data
storeMap[storeId] = store;
console.log(storeMap); //prints out store data
}
这只会在Store.findOne
完成工作后运行,这可能需要很长时间。
但是,下面的一行console.log(storeMap);
会在回调运行之前立即执行。因此,storeMap仍然是空的。
我建议查看node.js中回调模式的一些示例/解释,这是理解的基础。
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 在对象数组中查找多个值的d3范围
- 动态加载angularjs并生成控制器和范围
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在Materialize Calendar中设置年份范围
- 在MVVM视图模型中处理应用程序范围的元素
- setInterval游戏循环的范围问题
- AngularJS获取范围中的选定项目
- 从指定范围创建字符数组
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- ngDialog-弹出窗口未更新范围变量
- 如何使用D3生成特定范围内的随机颜色
- Mongoose findOne范围存疑