百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> javascript如何解决mongoose数据查询异步操作的教程
分享文章到:

javascript如何解决mongoose数据查询异步操作的教程

发布时间:01/15 来源: 浏览: 关键词:
这篇文章讲解了在node环境下操作mongoose时候,发现通过嵌套形式查询将数据循环放入一个数组时,最后得到数组一直为空的解决办法,有需要的同学快看看吧!

当我在node环境下操作mongoose时候,发现我通过嵌套形式查询将数据循环放入一个数组时,最后得到数组一直为空,几经百度,依然无果,最后问群里的大神,原来是mongoose以及node异步造成的,百度了解决的办法,以下是我用的一个我认为比较简便的方法。

//原来的代码
varshoppingModel = global.dbHandle.getModel('shopping');
varcartsshop = [];
for(vari = 0;i<carts.length;i++){
shoppingModel.findOne({title:carts[i].title},function(err,shops) {
  if(err){
    returnnext(err);
  }else{
    cartsshop.push(shops);
  }
 });
}
console.log(cartsshop);//[]

通过引入node自身含有的方法events.

events

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。

EventEmitter 类

events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
你可以通过require(“events”);来访问该模块。

以下是一个实例,

//event.js 文件
varEventEmitter = require('events').EventEmitter;
varevent =newEventEmitter();
event.on('some_event',function() {
  console.log('some_event 事件触发');
});
setTimeout(function() {
  event.emit('some_event');
}, 1000);

将我自己的代码进行改进,如下:

varshoppingModel = global.dbHandle.getModel('shopping');
varcartsshop = [];
varobj ;
varj = 0;
varmyEventEmitter =newevents.EventEmitter();
myEventEmitter.on('next',addResult);
functionaddResult() {
  cartsshop.push(obj);
  j++;
  if(j==carts.length){
    console.log(cartsshop);
    res.json(cartsshop);
  }
}
for(vari = 0;i<carts.length;i++){
  varii = i;
 shoppingModel.findOne({title:carts[ii].title},function(err,shops) {
  if(err){
    returnnext(err);
  }else{
    obj = shops;
    myEventEmitter.emit('next');
  }
 });
}

当然使用之前必须引入

varevents = require('events');

最后,就成功将数据取出,并返回给客户端啦。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有3人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板