ホームページ >ウェブフロントエンド >jsチュートリアル >node.js_node.js で同期操作を実装する 3 つの方法
ご存知のとおり、非同期は独特の機能であり利点ですが、同時にプログラム内で同期が必要になります (たとえば、制御プログラムの実行順序は func1 -> func2 -> )。 func3) も非常に一般的です。この記事では、この問題に関する私の考えをいくつか記録します。
実行する必要がある関数:
var func3 = function(req,res,callback){
setTimeout(function(){
console.log('in func3');
コールバック(req,res,3);
},1000);
}
func1、func2、func3でsetTimeout関数が使用されており、実行時間はそれぞれ13秒、5秒、1秒であることがわかります。 nodejs の非同期の性質により、通常の関数呼び出しメソッドを使用する場合:
出力内容:
その理由は、nodejs が非同期であるため、func2 は func1 の実行が完了するのを待たずにすぐに実行するためです (func3 についても同様です)。 func3 の実行時間が最も短いため、func3 が最初に終了し、続いて func2、func1 が最後になります。しかし、これは明らかに私たちが望む結果ではありません。何をするか?
解決策 1: コールバック
func1(req,res,function(){
func2(req,res,function(){
func3(req,res,function(){
プロセス.exit(0);
})
});
});
解決策 2: 再帰呼び出し
var req = null;
var res = null;
var funcs = [func1,func2,func3];
var len = funcs.length;
executeFunc(funcs,0,len,req,res);
解決策 3: クラス ライブラリを呼び出す
nodejs の開発に伴い、対応するクラス ライブラリがますます増えています。 Step と async は良いものです。1. Step の呼び出しは比較的新鮮です:
async.series(
[
関数(コールバック){
func1(req,res,callback);
}、
関数(コールバック){
func2(req,res,callback);
}、
関数(コールバック){
func3(req,res,callback);
}
]
);