node.js_node.js で同期操作を実装する 3 つの方法
ご存知のとおり、非同期は独特の機能であり利点ですが、同時にプログラム内で同期が必要になります (たとえば、制御プログラムの実行順序は func1 -> func2 -> )。 func3) も非常に一般的です。この記事では、この問題に関する私の考えをいくつか記録します。
実行する必要がある関数:
var func1 = function(req,res,callback){
setTimeout(function(){
console.log('in func1');
コールバック(req,res,1);
},13000);
}
var func2 = function(req,res,callback){
setTimeout(function(){
console.log('in func2');
コールバック(req,res,2);
},5000);
}
var func3 = function(req,res,callback){
setTimeout(function(){
console.log('in func3');
コールバック(req,res,3);
},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 の実行時間が最も短いため、func3 が最初に終了し、続いて func2、func1 が最後になります。しかし、これは明らかに私たちが望む結果ではありません。何をするか?
解決策 1: コールバック
//深いネスト
var req = null;
var res = null;
func1(req,res,function(){
func2(req,res,function(){
func3(req,res,function(){
プロセス.exit(0);
})
});
});
解決策 2: 再帰呼び出し
if(カウント == 合計){
戻る ;
}
それ以外{
funcs[カウント](req,req,function(){
カウント ;
executeFunc(funcs,count,sum,req,res);
});
}
}
//同期呼び出し
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 の呼び出しは比較的新鮮です:
関数 thefunc1(){
func1(this);
}、
function thefunc2(finishFlag){
console.log(finishFlag);
func2(this);
}、
function thefunc3(finishFlag){
console.log(finishFlag);
}
);
2.async の一連のメソッド、この場合は呼び出しメソッド:
var req = null;
var res = null;
var callback = function(){};
async.series(
[
関数(コールバック){
func1(req,res,callback);
}、
関数(コールバック){
func2(req,res,callback);
}、
関数(コールバック){
func3(req,res,callback);
}
]
);

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。
