Node.js 非同期プログラミングにおけるコールバックの詳細な分析
ノンブロッキング I/O の実行結果を受け取るには、コールバック関数が必要です。次の記事では、非同期プログラミングにおける Node.jscallback (コールバック) について詳しく説明します。
[推奨学習: 「nodejs チュートリアル 」]
ノンブロッキング I/O の実行結果にはコールバック関数が必要ですはい、コールバック関数を使用するこの方法は非同期プログラミングです。
#非同期プログラミングのケース 1function interview(callback) {
setTimeout(() => {
callback("success");
}, 1000);
}
interview(function (res) {
if (res === "success") {
console.log("============我笑了");
}
});
ログイン後にコピー
function interview(callback) { setTimeout(() => { callback("success"); }, 1000); } interview(function (res) { if (res === "success") { console.log("============我笑了"); } });
コールバック関数の形式の仕様
##error-first callbak- Node-style コールバック
- 最初のパラメータはエラーで、次のパラメータは結果です
function interview(callback) {
setTimeout(() => {
if (Math.random() < 0.3) {
callback("success");
}
throw new Error("fail");
}, 1000);
}
try {
interview(function (res) {
if (res === "success") {
console.log("============我笑了");
}
});
} catch (error) {
console.log("fail", error);
}
ログイン後にコピー
function interview(callback) { setTimeout(() => { if (Math.random() < 0.3) { callback("success"); } throw new Error("fail"); }, 1000); } try { interview(function (res) { if (res === "success") { console.log("============我笑了"); } }); } catch (error) { console.log("fail", error); }
上記のコードでは、
は、 throw new Error('fail')
! によってスローされたエラーをキャプチャできません。 、しかし JS グローバルに投げられます! Node.js では、グローバル エラーは非常に深刻であり、プログラムのクラッシュを引き起こす可能性があります。 setTimeout の
をキャプチャできない try catch
がないのはなぜですか?これは、コール スタック
および イベント ループ!
setTimeoutとインタビューの 2 つの異なるイベント ループです。
function interview(callback) {
setTimeout(() => {
if (Math.random() < 0.3) {
callback(null, "success");
} else {
callback(new Error("fail"));
}
}, 1000);
}
interview(function (error) {
if (error) {
return console.log("============我哭了");
}
console.log("============我笑了");
});
非同期プロセス制御の問題
コールバック地獄
複数の非同期タスクが連続して発生する状況は以下のとおりです。 N 回のインタビューをシミュレートしましょう。
function interview(callback) { setTimeout(() => { if (Math.random() < 0.6) { callback(null, "success"); } else { callback(new Error("fail")); } }, 1000); } interview(function (error) { if (error) { return console.log("======第一轮面试======我哭了"); } interview(function (error) { if (error) { return console.log("====第二轮面试========我哭了"); } interview(function (error) { if (error) { return console.log("====第三轮面试========我哭了"); } console.log("三轮面试都成功了!啊哈哈哈!"); }); }); });
上記の非同期プロセスには 3 つのレベルの入れ子があることがわかります。これは、コードが比較的単純な状況にすぎません。したがって、実際のアプリケーションでは、入れ子になった各関数が非常に複雑になる可能性があり、そのため開発と保守が困難になり、それを見た人がイライラすることになります。これは、いわゆる ** コールバック地獄 **
a複数の非同期タスクの同時状況
function interviewCompay() { let count = 0; interview(function (error) { if (error) { return console.log("====第一家公司面试========我哭了"); } count++; }); interview(function (error) { if (error) { return console.log("====第二家公司面试========我哭了"); } count++; if (count === 2) { return console.log("两家公司面试都成功了!我笑了"); } }); } interviewCompay();
複数の非同期タスクの結果を取得するには、同じ変数を各非同期タスクに追加する必要があります
#非同期プロセスの制御問題を解決する
promise
- async await
- プログラミング関連の知識の詳細については、次のサイトを参照してください。 プログラミングビデオ
以上がNode.js 非同期プログラミングにおけるコールバックの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック









概要: C++ の非同期プログラミングを使用すると、時間のかかる操作を待たずにマルチタスクを行うことができます。関数ポインターを使用して、関数へのポインターを作成します。コールバック関数は、非同期操作が完了すると呼び出されます。 boost::asio などのライブラリは、非同期プログラミングのサポートを提供します。実際のケースでは、関数ポインターと boost::asio を使用して非同期ネットワーク リクエストを実装する方法を示します。

JavaScript 関数の非同期プログラミング: 複雑なタスクを処理するための必須スキル はじめに: 最新のフロントエンド開発では、複雑なタスクを処理することが不可欠な部分になっています。 JavaScript 関数の非同期プログラミング スキルは、これらの複雑なタスクを解決する鍵となります。この記事では、JavaScript 関数の非同期プログラミングの基本概念と一般的な実践的な方法を紹介し、読者がこれらのテクニックをよりよく理解して使用できるように、具体的なコード例を示します。 1. 非同期プログラミングの基本概念 従来の同期プログラミングでは、コードは次のようになります。

PHP8 の新機能を深く理解する: 非同期プログラミングとコードを効率的に使用するにはどうすればよいですか? PHP8 は PHP プログラミング言語の最新メジャー バージョンであり、多くのエキサイティングな新機能と改善をもたらします。最も顕著な機能の 1 つは、非同期プログラミングのサポートです。非同期プログラミングを使用すると、同時タスクを処理するときのパフォーマンスと応答性を向上させることができます。この記事では、PHP8 の非同期プログラミング機能を詳しく説明し、それらを効率的に使用する方法を紹介します。まず、非同期プログラミングとは何かを理解しましょう。従来の同期プログラミング モデルでは、コードは線形シーケンスに従います。

Java フレームワークでの非同期プログラミングにおける 3 つの一般的な問題と解決策: コールバック地獄: Promise または CompletableFuture を使用して、より直感的なスタイルでコールバックを管理します。リソースの競合: 同期プリミティブ (ロックなど) を使用して共有リソースを保護し、スレッドセーフなコレクション (ConcurrentHashMap など) の使用を検討します。未処理の例外: タスク内の例外を明示的に処理し、例外処理フレームワーク (CompletableFuture.Exceptionally() など) を使用して例外を処理します。

Go フレームワークは Go の同時実行性と非同期機能を使用して、同時タスクと非同期タスクを効率的に処理するためのメカニズムを提供します。 1. 同時実行性は Goroutine によって実現され、複数のタスクを同時に実行できます。 2. 非同期プログラミングはチャネルを通じて実装されます。メインスレッドをブロックせずに実行可能。 3. HTTP リクエストの同時処理、データベース データの非同期取得などの実用的なシナリオに適しています。

2023年12月1日の取引序盤では、主要3株価指数が値を下げて始まった。ロボットETF(562500)はセッション序盤に下落した後、横ばいで取引を開始した。 10時20分現在、ロボットETF(562500)は0.92%下落し、保有銘柄82銘柄中60銘柄以上が下落した。 Daheng TechnologyとShitou Technologyは5%以上下落し、Sukron Technology、Keda Intelligence、Xianhui Technology、Hongxun Technologyは3%以上下落した。今日の取引序盤の時点で、ロボットETF(562500)は3日連続で調整している。過去 1 か月の状況を振り返ると、ロボット ETF (562500) は 3 日連続で調整が 1 回だけで、その後 8 回連続のプラストレンドを迎えました。 11月初旬の関連部門の発表を受けて、今回の撤退は良いレイアウトの機会となるかもしれない。

PHP での非同期プログラミングの利点には、スループットの向上、待ち時間の短縮、リソース使用率の向上、およびスケーラビリティが含まれます。欠点としては、複雑さ、デバッグの難しさ、ライブラリのサポートの制限などが挙げられます。実際のケースでは、WebSocket 接続の処理に ReactPHP が使用され、非同期プログラミングの実際的な応用例が示されています。

1. 非同期プログラミングを使用する理由は何ですか?従来のプログラミングではブロッキング I/O が使用されます。つまり、プログラムは操作が完了するまで待機してから続行します。これは単一のタスクではうまく機能する可能性がありますが、多数のタスクを処理する場合にはプログラムの速度が低下する可能性があります。非同期プログラミングは、従来のブロッキング I/O の制限を破り、非ブロッキング I/O を使用します。つまり、プログラムは、タスクの完了を待たずに、タスクを別のスレッドまたはイベント ループに分散して実行できます。これにより、プログラムは複数のタスクを同時に処理できるようになり、プログラムのパフォーマンスと効率が向上します。 2. Python 非同期プログラミングの基礎 Python 非同期プログラミングの基礎は、コルーチンとイベント ループです。コルーチンは、関数の一時停止と再開を切り替えることができる関数です。イベントループはスケジュールを担当します
