国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript-解決mongoose數(shù)據(jù)查詢的異步操作

2019-11-19 18:20:42
字體:
供稿:網(wǎng)友

當(dāng)我在在node環(huán)境下操作mongoose時候,發(fā)現(xiàn)我通過嵌套形式查詢將數(shù)據(jù)循環(huán)放入一個數(shù)組時,最后得到數(shù)組一直為空,幾經(jīng)百度,依然無果,最后問群里的大神,原來是mongoose以及node異步造成的,百度了解決的辦法,以下是我用的一個我認(rèn)為比較簡便的方法。

//原來的代碼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 操作在完成時都會發(fā)送一個事件到事件隊列。

Node.js里面的許多對象都會分發(fā)事件:一個net.Server對象會在每次有新連接時分發(fā)一個事件, 一個fs.readStream對象會在文件被打開的時候發(fā)出一個事件。 所有這些產(chǎn)生事件的對象都是 events.EventEmitter 的實例。

EventEmitter 類

events 模塊只提供了一個對象: events.EventEmitter。EventEmitter 的核心就是事件觸發(fā)與事件監(jiān)聽器功能的封裝。
你可以通過require(“events”);來訪問該模塊。

以下是一個實例,

//event.js 文件var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() {   console.log('some_event 事件觸發(fā)'); }); setTimeout(function() {   event.emit('some_event'); }, 1000); 

將我自己的代碼進(jìn)行改進(jìn),如下:

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');  } });}

當(dāng)然使用之前必須引入

var events = require('events');

最后,就成功將數(shù)據(jù)取出,并返回給客戶端啦。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 隆子县| 漳州市| 开阳县| 日土县| 双牌县| 屯门区| 上饶县| 昌乐县| 彭州市| 诸暨市| 浮梁县| 南涧| 博爱县| 苏尼特右旗| 进贤县| 尼勒克县| 儋州市| 银川市| 荔波县| 苏尼特左旗| 凯里市| 博湖县| 鹿泉市| 汉中市| 黄石市| 鄂托克前旗| 祁连县| 瑞安市| 玉溪市| 屏边| 新乡市| 汽车| 绥棱县| 电白县| 县级市| 桐梓县| 泗洪县| 红河县| 泰来县| 丘北县| 新乐市|