Heim > Artikel > Web-Frontend > Eine eingehende Analyse des Rückrufs in der asynchronen Programmierung von Node.js
Das Operationsergebnis der nicht blockierenden E/A erfordert zum Empfang eine Rückruffunktion. Der folgende Artikel stellt Ihnen den Rückruf in der asynchronen Node.js-Programmierung im Detail vor.
【Empfohlene Studie: „
nodejs-Tutorial“】Die laufenden Ergebnisse nicht blockierender E/A müssen von Rückruffunktionen empfangen werden. Diese Methode zur Verwendung von Rückruffunktionen ist asynchrone Programmierung!
Asynchroner Programmierfall einsfunction 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); }
Im obigen Code kann try Catch
den von throw new Error('fail')
ausgelösten Fehler nicht erfassen! , aber auf die JS-Globalseite geworfen! In Node.js sind globale Fehler sehr schwerwiegend und können zum Absturz des Programms führen!
Warum kann try Catch
den throw
in setTimeout nicht erfassen? Das hat etwas mit try catch
并不能捕获 throw new Error('fail')
抛出的错误!,而是抛出到了 JS 全局! 在 Node.js 中,全局错误时非常严重的事情,会造成程序的崩溃!
为什么没 try catch
无法捕获 setTimeout 里面的 throw
呢? 这就跟调用栈 和 事件循环有关系了!
每一个事件循环都是一个全新的调用栈! setTimeout
Aufrufstapel und
zu tun!
Jede Ereignisschleife ist ein brandneuer Aufrufstapel und interview sind zwei verschiedene Ereignisschleifen!Aber dieses Problem kann gelöst werden, indem ein Fehler in den Parametern der Rückruffunktion ausgegeben wird
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("============我笑了"); });
Sie können sehen, dass der obige asynchrone Prozess in drei Ebenen eingebettet ist Dies ist nur ein Fall, in dem der Code relativ einfach ist! In tatsächlichen Anwendungen kann jede verschachtelte Funktion sehr komplex sein, was die Entwicklung und Wartung erschwert und die Leute beim Betrachten wütend macht. Dies ist die sogenannte ** Rückrufhölle **
afunction 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("三轮面试都成功了!啊哈哈哈!"); }); }); });
Das obige ist der detaillierte Inhalt vonEine eingehende Analyse des Rückrufs in der asynchronen Programmierung von Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!