如何讓nodejs同步操作

2022-04-03 13:32:00 字數 1771 閱讀 4602

需要執行的函式:

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

輸出內容:

in func3

in func2

in func1

原因是因為nodejs是非同步的,func2不會等func1執行完畢後再執行,而是立即執行(func3也是如此)。由於func3的執行時間最短而率先結束,func2次之,func1最後。但這明顯不是我們想要的結果。怎麼辦?

解決辦法一:callback

//

深層巢狀

var req = null;

var res = null;

func1(req,res,function())

});

});

這種方法雖然能快速的解決,但暴露的問題也很明顯,一是**維護不方面,二是**的深層巢狀看起來很不舒服。這種方法並不可取。

解決方法二:遞迴呼叫

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

先將多個函式組成乙個陣列。再可以利用遞迴函式的特性,使程式按照一定的順序執行。

解決方法三:呼叫類庫

隨著nodejs的發展,響應的類庫也越來越多。step

和async 就是其中不錯的。

1. step的呼叫相對比較清爽:

step(

function thefunc1(),

function thefunc2(finishflag),

function thefunc3(finishflag)

);

2.async 的 series

方法,就本例而言,它的呼叫方法:

var req = null;

var res = null;

var callback = function(){};

async.series(

[function(callback),

function(callback),

function(callback)

]);

如何讓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...

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...

sqoop同步操作例項

1 自由模式查詢同步資料 如下 bin sqoop import connect jdbc mysql xxurl 埠 庫名 tinyint1isbit false username 使用者名稱 password 密碼 null string n null non string n query se...