欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年12月22日 08:37:59   作者:千里之外  
這篇文章主要介紹了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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JavaScript中的事件與異常捕獲詳析

    JavaScript中的事件與異常捕獲詳析

    這篇文章主要給大家介紹了關于JavaScript中事件與異常捕獲的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • JS倒計時兩種實現(xiàn)方式代碼實例

    JS倒計時兩種實現(xiàn)方式代碼實例

    這篇文章主要介紹了JS倒計時兩種實現(xiàn)方式代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 在table中插入多行,能使用與insertAdjacentHTML相似的功能嗎?

    在table中插入多行,能使用與insertAdjacentHTML相似的功能嗎?

    在table中插入多行,能使用與insertAdjacentHTML相似的功能嗎?...
    2006-12-12
  • 通過正則格式化url查詢字符串實現(xiàn)代碼

    通過正則格式化url查詢字符串實現(xiàn)代碼

    看到項目里通過js數(shù)組split方法格式化查詢字符串的,突發(fā)奇想為什么不能用正則呢,性能如何?感興趣的朋友可以研究下哦
    2012-12-12
  • JavaScript彈出窗口方法匯總

    JavaScript彈出窗口方法匯總

    這篇文章主要介紹了JavaScript彈出窗口方法,非常實用的功能,需要的朋友可以參考下
    2014-08-08
  • Javascript oop設計模式 面向?qū)ο缶幊毯唵螌嵗榻B

    Javascript oop設計模式 面向?qū)ο缶幊毯唵螌嵗榻B

    這篇文章主要介紹了Javascript oop設計模式 面向?qū)ο缶幊毯唵螌嵗榻B的相關資料,這里附有實例代碼幫助大家學習理解,需要的朋友可以參考下
    2016-12-12
  • 在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法

    在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法

    今天小編大家分享一篇在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • javascript?Echart可視化學習

    javascript?Echart可視化學習

    這篇文章主要為大家介紹了Echart可視化學習的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 微信小程序使用第三方庫Immutable.js實例詳解

    微信小程序使用第三方庫Immutable.js實例詳解

    Immutable 是 Facebook 開發(fā)的不可變數(shù)據(jù)集合。不可變數(shù)據(jù)一旦創(chuàng)建就不能被修改,是的應用開發(fā)更簡單,允許使用函數(shù)式編程技術(shù),比如惰性評估。微信小程序無法直接使用Immutable.js,下面就來說說微信小程序如何使用第三方庫Immutable.js。
    2016-09-09
  • Nginx上傳文件全部緩存解決方案

    Nginx上傳文件全部緩存解決方案

    Nginx默認會對上傳的文件先在本地進行緩存,再轉(zhuǎn)發(fā)到應用服務器。請問怎么禁止掉這個緩存,讓Nginx只轉(zhuǎn)發(fā)而不緩存文件?本文給大家詳細介紹Nginx上傳文件全部緩存解決方案,有需要的朋友來參考下
    2015-08-08

最新評論