全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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里面的许多对象都会分发事件:一个net.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');

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# mongoose  # 异步  # 查询  # mongoose查询  # JavaScript异步操作的几种常见处理方法实例总结  # 解决Angularjs异步操作后台请求用$q.all排列先后顺序问题  # ES6 javascript的异步操作实例详解  # async/await与promise(nodejs中的异步操作问题)  # thinkjs之页面跳转同步异步操作  # 一个简单的Node.js异步操作管理器分享  # JavaScript异步操作中串行和并行  # 会在  # 自己的  # 都是  # 是一个  # 你可以  # 当我  # 我认为  # 我用  # 大神  # 将我  # 只提供  # 大家多多  # 为空  # 群里  # 客户端  # 无果  # 来访问  # getModel  # shopping  # dbHandle 


相关文章: 焦点电影公司作品,电影焦点结局是什么?  潮流网站制作头像软件下载,适合母子的网名有哪些?  nginx修改上传文件大小限制的方法  网页设计网站制作软件,microsoft office哪个可以创建网页?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  网站制作费用多少钱,一个网站的运营,需要哪些费用?  建站主机空间推荐 高性价比配置与快速部署方案解析  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何获取上海专业网站定制建站电话?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何快速查询域名建站关键信息?  大连网站制作公司哪家好一点,大连买房网站哪个好?  ui设计制作网站有哪些,手机UI设计网址吗?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何快速选择适合个人网站的云服务器配置?  建站之星如何修改网站生成路径?  如何选择PHP开源工具快速搭建网站?  如何用wdcp快速搭建高效网站?  如何在建站主机中优化服务器配置?  如何在阿里云香港服务器快速搭建网站?  如何用已有域名快速搭建网站?  如何在IIS7中新建站点?详细步骤解析  高性能网站服务器配置指南:安全稳定与高效建站核心方案  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  重庆网站制作公司哪家好,重庆中考招生办官方网站?  如何自定义建站之星网站的导航菜单样式?  如何在云指建站中生成FTP站点?  如何高效配置IIS服务器搭建网站?  如何选择可靠的免备案建站服务器?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  外贸公司网站制作哪家好,maersk船公司官网?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  b2c电商网站制作流程,b2c水平综合的电商平台?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  建站与域名管理如何高效结合?  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  Python如何创建带属性的XML节点  简单实现Android验证码  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何快速搭建安全的FTP站点?  建站org新手必看:2024最新搭建流程与模板选择技巧  如何基于PHP生成高效IDC网络公司建站源码?  如何高效完成独享虚拟主机建站?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  免费ppt制作网站,有没有值得推荐的免费PPT网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。