背景:在一个简单的项目中,通过循环前端传来的一个数组,使用mongodb条件查询数据,将满足条件的数据push进一个新数组,并返回至前端。

问题:每次调试到第五行,会自动跳过,直接执行12行,打印出来的数据为空

抛出一段代码:

有bug的代码:

 var dataArr = [];
router.get('/borrowing', (req, res) => {
let params = JSON.parse(req.query.borrow); // 执行完这行,直接跳到12行执行 params.state.forEach(element => {
collection.findOne({'_id': element.bID}).then((data) => {
dataArr.push(data);
// console.log("里面"+dataArr);
console.log(data);
})
});
console.log("外面"+dataArr); // 直接执行这行
res.json({
"status": "ok",
"result": dataArr
});
});

在网上看到一些类似的问题,参照他们的例子,也找到了自己问题的答案。

首先使用async.map()遍历方法遍历数组,async.map方法是并行执行的,会等到所有数据遍历完之后,最后执行回调函数,在回调函数里就可以访问到数据传到前端。

注意:一定要在map中调用callback回调函数,不然写了也不会执行的(亲身经历)

修改之后,能获取到数据的代码:

 var dataArr = [];
router.get('/borrowing', (req, res) => {
let params = JSON.parse(req.query.borrow);
async.map(params.state, (item, callback) => {
collection.findOne({
'_id': item.bID
}).then((data) => {
// dataArr.push(data);
// console.log(data);
callback(null, data);
})
}, (err, results) => {
res.json({
"status": "ok",
"result": results
});
})
});

在解决这次bug中积累到的知识:

1、

res.json({
"status": "ok",
"result": results
});

不能放在循环里,只能发送一次

2、collection.find()返回符合条件的第一个文档,是一个对象,findOne()返回所有符合条件的对象,是一个数组

3、forEach()遍历数组,对数组中的每一项运行给定函数,但是没有返回值

map()遍历数组,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组

4、async.eachSeries()用来异步执行一系列操作,保证每次遍历都执行完毕后再执行下一步操作

最新文章

  1. Hamming Distance
  2. linux cat 命令详解
  3. [fortify] preg_replace命令注入
  4. ELK日志管理之——elasticsearch部署
  5. Delete characters
  6. Unity3D ShaderLab 简单的立方体图反射
  7. 【JavaScript】创建命名空间,Class,LOG
  8. FM算法
  9. 【贪心+一点小思路】Zoj - 3829 Known Notation
  10. Pascal's Triangle II 解答
  11. 【Linux编程】存储映射I/O
  12. 使用spring mvc返回JSON,chrome可以,firefox不行的问题定位
  13. 简单的C#实体映射 AutoMapper
  14. 爬虫模块介绍--selenium (浏览器自动化测试工具,模拟可以调用浏览器模拟人操作浏览器)
  15. 信号量的基本概念与使用semget,semop
  16. Docker Compose(八)
  17. 修改chrome浏览器默认css样式的方法
  18. python 网页cookie的使用
  19. 强大的Django后台管理
  20. mysql日期时间函数使用总结

热门文章

  1. Poj_1068 Parencodings
  2. unreal Script(US)一些注意事项
  3. CUDA 9.1/9.2 与 Visual Studio 2017 (VS2017 15.6.4) 的不兼容问题
  4. 在VS中对WCF服务进行更新,但是配置文件没有更新解决办法
  5. Entity Framework5学习笔记
  6. 7.20实习培训日志-Java基础程序设计结构
  7. pandas基础(1)_Series和DataFrame
  8. 51nod1117【贪心】
  9. 51nod1113(矩阵快速幂模板)
  10. transition动画最简使用方式