javascript-解决mongoose数据查询的异步操作
网络编程 2021-07-04 19:19www.168986.cn编程入门
这篇文章主要介绍了javascript-解决mongoose数据查询的异步操作,具有一定的参考价值,有兴趣的可以了解一下。
当我在在node环境下操作mongoose时候,发现我通过嵌套形式查询将数据循环放入一个数组时,得到数组一直为空,几经百度,依然无果,问群里的大神,原来是mongoose以及node异步造成的,百度了解决的办法,以下是我用的一个我认为比较简便的方法。
//原来的代码 var shoppingModel = global.dbHandle.getModel('shopping'); var cartsshop = []; for(var i = 0;i<carts.length;i++){ shoppingModel.findOne({title:carts[i].title},function (err,shops) { if(err){ return next(err); }else{ cartsshop.push(shops); } }); } console.log(cartsshop);//[]
通过引入node自身含有的方法events.
events
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。
Node.js里面的许多对象都会分发事件一个.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。
EventEmitter 类
events 模块只提供了一个对象 events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
你可以通过require(“events”);来访问该模块。
以下是一个实例,
//event.js 文件 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件触发'); }); setTimeout(function() { event.emit('some_event'); }, 1000);
将我自己的代码进行改进,如下
var shoppingModel = global.dbHandle.getModel('shopping'); var cartsshop = []; var obj ; var j = 0; var myEventEmitter = new events.EventEmitter(); myEventEmitter.on('next',addResult); function addResult() { cartsshop.push(obj); j++; if(j==carts.length){ console.log(cartsshop); res.json(cartsshop); } } for(var i = 0;i<carts.length;i++){ var ii = i; shoppingModel.findOne({title:carts[ii].title},function (err,shops) { if(err){ return next(err); }else{ obj = shops; myEventEmitter.emit('next'); } }); }
使用之前必须引入
var events = require('events');
,就成功将数据取出,并返回给客户端啦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
上一篇:JS实现间歇滚动的运动效果实例
下一篇:Bootstrap popover用法详解
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程