1. 程式人生 > >nodejs 非同步io 解決for迴圈最佳方案

nodejs 非同步io 解決for迴圈最佳方案

nodejs 眾所周知單執行緒,非同步io。

模型圖如下:

111

對於for迴圈來說寫起來非常麻煩,曾嘗試過閉包,es6,asnyc。

最終選擇了使用 eventproxy,具體是什麼東西,大家可以百度。用起來很方便,下面上一簡單個人親測程式碼示例:

var eventproxy = require('eventproxy');

var ep = new eventproxy();

               // list 結果集合

                ep.after('get_attendance_teacher', result.length, function (list) {
                   
                    res.json(list);
                });
                //for迴圈 io
                for (var i = 0; i < result.length; i++) {
                    var queryAttendance ={};
                    queryAttendance = {'userId':result[i]._id,"time" : {$gt:startDate, $lt:endDate}};
                    Attendance.find(queryAttendance, function(err, resultAttendance) {
                        if (err) {
                            console.log("db get attendance err::", err);
                            return;
                        }
                        ep.emit('get_attendance_teacher', resultAttendance);

                    }).sort({"name":1,'time':timeSort});

                }
            }

雙層for迴圈 簡單demo

var arr = [{name:'Jack'}, {name:'Mike'}];
            async.map(arr, function(item1, callback1) {
                    
                    var arr2 = [{name:'111'}, {name:'222'}];
                    async.map(arr2, function(item2, callback2) {
                        callback2(null, item1.name+item2.name+'!!!');
                    }, function(err,abc) {
                        console.log(111111111)
                        console.log(abc)
                        // jack111 jack222   
                        // 11111111
                        // mike111 mike222
                        callback1(null, abc);
                    });

            }, function(err,resultAll) {
                console.log(2222222)
                console.log(resultAll)
                // jack111 jack222   mike111 mike222
            });

相關推薦

nodejs 非同步io 解決for迴圈最佳方案

nodejs 眾所周知單執行緒,非同步io。 模型圖如下: 對於for迴圈來說寫起來非常麻煩,曾嘗試過閉包,es6,asnyc。 最終選擇了使用 eventproxy,具體是什麼東西,大家可以百度。用起來很方便,下面上一簡單個人親測程式碼示例: var eventprox

let解決for迴圈中的閉包

場景 閉包產生 內部函式依賴了外部作用域變數,即內部持有外部引用不釋放(延續了引用變數的生命週期,延壽) 變數的本質其實就是一個佔位符,其值才是真正操作物件 值可以是各語言的標量,也可以是記憶體地址(即通俗的引用型別) var VS let let

使用 let 解決for 迴圈閉包 i變數問題

當let塊範圍變量出現後,可以方便解決 for迴圈i變數繫結問題,demo 如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; c

js閉包,解決for迴圈變數未定義等類似問題

迴圈中的閉包 一個常見的錯誤出現在迴圈中使用閉包,假設我們需要在每次迴圈中呼叫迴圈序號 for(var i = 0; i < 10; i++) { setTimeout(function() { console.log(i);

nodejs非同步IO的實現

  nodejs的核心之一就是非阻塞的非同步IO,於是想知道它是怎麼實現的,挖了下nodejs原始碼,找到些答案,在此跟大家分享下。首先,我用了一段js程式碼test-fs-read.js做測試,程式碼如下: var path = require('path'), fs =

javascript解決for迴圈中i取值的問題

最近在做專案時遇到呼叫for迴圈中i取值問題,主要程式碼如下: function delete__listen() { var detNum=document.getElementsByTagName('li'); for(var i =

js中for迴圈內的匿名函式使用i的問題及解決方案

問題描述 js中由於作用域鏈及js執行機制導致的for迴圈中匿名函式使用i的問題 <!--現有html結構程式碼如下--> <ul> <li>VueJs</li> <li>AngularJs<

for迴圈中的閉包問題及解決方案

說到閉包,我們首先來看一個最最簡單的例子,也是最最基礎的例子:為多個相同的元素,繫結事件,在點選每一個元素時,提示被點選元素的排列位置。<span style="font-size:14px;"> <div id = "test">

matlab for迴圈過大程式執行慢解決方案

      實驗室經常需要使用到matlab,for迴圈非常慢,自己找了一些matlab中for迴圈的優化方法,for的部分每處理一個大矩陣都要花費大量的時間,這是不可避免需要遇到的問題~。 方法1

解決nodejs非同步資料延遲 解決方案

回撥還產生了很多問題,最嚴重的問題是callback hell回撥地獄。 fs.readFile('/etc/password', function(err, data){ // do something fs.readFile('xxxx', func

網絡IO解決方案 — 協程框架的實現

知識 ffffff affinity nts 數據存儲 \n 問題 family lba 協程這個概念很久了,好多程序員是實現過這個組件的,網上關於協程的文章,博客,論壇都是汗牛充棟,在知乎,github上面也有很多大牛寫了關於協程的心得體會。突發奇想,我也來實現一個這樣的

for迴圈呼叫刪除方法報錯解決辦法

1.每次刪除一個元素,索引往前移,即i-1.      List<String> list = new ArrayList<String>();      list.add("111");  &nbs

在vue中解決提示警告 for迴圈報錯的方法

警告 1.出現這個警告問題的時候 我們可以去main.js中在頭部新增這句話: ? 1

vue解決提示警告for迴圈報錯的方法

  文章轉載於:http://www.codingke.com/article/4007   今天扣丁學堂HMTL5培訓老師給大家介紹一下關於在vue中解決提示警告for迴圈報錯的方法,希望大家學習HTML5開發有所幫助,下面我們一起來看一下吧。   1、出現這個警告問題的時候我們可以去main.js

微信小程式--多張圖片下載問題--for迴圈出現 漏下,亂序。最多下載5張圖片的問題解決(附帶個人開發小程式原始碼)

微信小程式多圖下載,之前肯定對單張圖片下載瞭解了。這裡就不再多說。 首先,多圖下載肯定是用到迴圈了。那麼問題就出在迴圈這裡。在迴圈裡呼叫單圖下載方法。這樣就會出現一個問題,就是下載時先遍歷完了,然後再依次執行wx.downloadfile 獲取到下載的臨時檔案路徑,再使用wx.saveIma

『PHP學習筆記』系列一:利用for迴圈解決過路口問題

過路口問題: 假設某人有100,000現金。每經過一次路口需要進行一次交費。交費規則為當他現金大於50,000時每次需要交5%如果現金小於等於50,000時每次交5,000。請寫一程式計算此人可以經過多少次這個路口。 解題思路: 此題最重要的其實就是思路和邏輯,程式碼實現其實很簡單,這裡

解決微信小程式、mpvue、vue 關於 wx:for、v-for 迴圈次數的問題

微信小程式:wx:if="{{index<5}}" <view wx:for="{{dataArray}}" wx:key="index" wx:for-item="item" wx:if="{{index<5}}"></view>   mp

用9種辦法解決 JS 閉包經典面試題之 for 迴圈取 i

閉包 正確的說,應該是指一個閉包域,每當聲明瞭一個函式,它就產生了一個閉包域(可以解釋為每個函式都有自己的函式棧),每個閉包域(Function 物件)都有一個 function scope(不是屬性),function scope內預設有個名為 Globe 的全域性引用(有了這個引用,就可以直接

解決開發過程中在迭代for迴圈出現的 ConcurrentModificationException

由於在開發過程中需要用到迭代和遍歷整理出適合的集合 public static List<CmtCommentReply> replyCollections(List<CmtCommentReply> list,int replayToNum){   

JavaScript——forfor in 的效能比較與for迴圈的優化方案

在JavaScript中,我們遍歷陣列的時候經常需要用到for和for in。今天來比較一下這兩個遍歷方法的效能,並提供優化方案。 1.for 和for in的效能比較 我們都知道,for 和for in的時間複雜度一樣,但是其效能有些許差距。具體有多大差距呢,下面我們來