前言:nodejs最大的特點就是其非同步操作,其後邊方法的執行不會等到前邊方法執行完才去執行,而是同時執行好幾個方法,這種方式在給我們提高效率的同時也給開發多多少少帶來了不便,有時候我們不要求有這種效果的出現,這時候就需要進行去非同步操作。
node的去非同步方式主要有三種:方法巢狀,遞迴呼叫,呼叫類庫
【例項**】
var func1 = function(req,res,callback),13000);
}var func2 = function(req,res,callback),5000);
}var func3 = function(req,res,callback),1000);
}#可以看出在func1,func2和func3中都是用了settimeout函式,執行的時間分別為13秒,5秒和1秒。由於nodejs非同步的特性,如果使用普通的函式呼叫方法:
var req = null;
var res = null;
var callback = function(){};
func1(req,res,callback);
func2(req,res,callback);
func3(req,res,callback);
#列印結果(非同步結果)
執行 func3
執行 func2
執行 func1
#原因是因為nodejs是非同步的,func2不會等func1執行完畢後再執行,而是立即執行(func3也是如此)。由於func3的執行時間最短而率先結束,func2次之,func1最後。但這明顯不是我們想要的結果。怎麼辦?
【處理去除非同步效果】
(1):方法巢狀
var req = null;
var res = null;
func1(req,res,function())
});});#這種方法雖然能快速的解決,但暴露的問題也很明顯,一是**維護不方面,二是**的深層巢狀看起來很不舒服。這種方法並不可取。
(2):遞迴呼叫
function executefunc(funcs,count,sum,req,res)else);
}} //同步呼叫
var req = null;
var res = null;
var funcs = [func1,func2,func3];
var len = funcs.length;
executefunc(funcs,0,len,req,res);
#先將多個函式組成乙個陣列。再可以利用遞迴函式的特性,使程式按照一定的順序執行。
(3):呼叫類庫 step和async
#隨著nodejs的發展,響應的類庫也越來越多。step和async 就是其中不錯的。
# 方式一: step實現 即用step方法將要實現同步的方法包裹起來
step(
function thefunc1(),
function thefunc2(finishflag),
function thefunc3(finishflag)
);# 方式二:async實現 其本質是使用async 的 series方法實現
var req = null;
var res = null;
var callback = function(){};
async.series(
[function(callback),
function(callback),
function(callback)
]);
NodeJS實現同步的方法
nodejs被打上了單執行緒 非阻塞 事件驅動 等標籤。在單執行緒的情況下,是無法開啟子執行緒的。經過了很久的研究,發現並沒有thread函式!但是有時候,我們確實需要 多執行緒 處理事務。nodejs有兩個很基礎的api settimeout和setinterval。這兩個函式都能實現 非同步 n...
nodejs實現同步http請求
nodejs實現同步http模組請求。用到http模組。在命令列呼叫node命令執行,可以這樣使用 let http require http 引入http模組 let co require co http模組傳送請求 param host param port param route param ...
nodejs實現同步操作想法實現
需要執行的函式 var func1 function req,res,callback 13000 var func2 function req,res,callback 5000 var func3 function req,res,callback 1000 可以看出在func1,func2和f...