ホームページ > 記事 > ウェブフロントエンド > Node.js 非同期プログラミングにおけるコールバックの詳細な分析
ノンブロッキング I/O の実行結果を受け取るには、コールバック関数が必要です。次の記事では、非同期プログラミングにおける Node.jscallback (コールバック) について詳しく説明します。
[推奨学習: 「nodejs チュートリアル 」]
ノンブロッキング I/O の実行結果にはコールバック関数が必要ですはい、コールバック関数を使用するこの方法は非同期プログラミングです。
function interview(callback) { setTimeout(() => { callback("success"); }, 1000); } interview(function (res) { if (res === "success") { console.log("============我笑了"); } });
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); }
上記のコードでは、
try catch は、 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("============我笑了");
});
上記のコードでは、次のようにして問題を解決できます。パラメータの型を調べて、エラーがあるかどうかを判断します。しかし、Node.js にはコールバック関数が多数あり、すべての関数でパラメータの型が間違っているかどうかを判断することは不可能です。
非同期プロセス制御の問題
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 つのレベルの入れ子があることがわかります。これは、コードが比較的単純な状況にすぎません。したがって、実際のアプリケーションでは、入れ子になった各関数が非常に複雑になる可能性があり、そのため開発と保守が困難になり、それを見た人がイライラすることになります。これは、いわゆる ** コールバック地獄 **
afunction 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();
複数の非同期タスクの結果を取得するには、同じ変数を各非同期タスクに追加する必要があります
#非同期プロセスの制御問題を解決する
以上がNode.js 非同期プログラミングにおけるコールバックの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。