您的位置:88bifa必发唯一官网 > 必发88首页 > Node.js里面包车型客车成都百货上千目的都会散发

Node.js里面包车型客车成都百货上千目的都会散发

发布时间:2019-06-25 01:25编辑:必发88首页浏览(143)

    当我在在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配合Node.js操作MongoDB的基础教程
    • Mongodb 数据类型及Mongoose常用CURD
    • 关于mongoose连接mongodb重复访问报错的解决办法
    • Node.js的MongoDB驱动Mongoose基本使用教程
    • 详解Nodejs基于mongoose模块的增删改查的操作
    • Mongoose学习全面理解(推荐)
    • Mongoose经常返回e11000 error的原因分析

    本文由88bifa必发唯一官网发布于必发88首页,转载请注明出处:Node.js里面包车型客车成都百货上千目的都会散发

    关键词: 必发88首页

上一篇:JavaScript中json操作本事总括

下一篇:没有了