javascript-解決mongoose數(shù)據(jù)查詢的異步操作
當我在在node環(huán)境下操作mongoose時候,發(fā)現(xiàn)我通過嵌套形式查詢將數(shù)據(jù)循環(huán)放入一個數(shù)組時,最后得到數(shù)組一直為空,幾經(jīng)百度,依然無果,最后問群里的大神,原來是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 操作在完成時都會發(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);
將我自己的代碼進行改進,如下:
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');
最后,就成功將數(shù)據(jù)取出,并返回給客戶端啦。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
在table中插入多行,能使用與insertAdjacentHTML相似的功能嗎?
在table中插入多行,能使用與insertAdjacentHTML相似的功能嗎?...2006-12-12Javascript oop設計模式 面向?qū)ο缶幊毯唵螌嵗榻B
這篇文章主要介紹了Javascript oop設計模式 面向?qū)ο缶幊毯唵螌嵗榻B的相關資料,這里附有實例代碼幫助大家學習理解,需要的朋友可以參考下2016-12-12在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法
今天小編大家分享一篇在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09