Home>Article>Web Front-end> An in-depth analysis of callback in Node.js asynchronous programming
The running results of non-blocking I/O require a callback function to receive. The following article will give you a detailed introduction toNode.jscallback (callback) in asynchronous programming.
[Recommended study: "nodejs Tutorial"]
The running result of non-blocking I/O requires a callback function to receive Yes, this way of using callback functions is asynchronous programming!
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 catchcannot capture the error thrown by
throw new Error('fail')! , but thrown to the JS global! In Node.js, global errors are very serious things and can cause the program to crash!
try catchthat cannot capture the
throwin setTimeout? This has something to do with
call stackandevent loop!
Each event loop is a brand new call stack!setTimeoutand interview are two different event loops!
But you can solve this problem by throwing an error in the parameters in the callback function
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("============我笑了"); });In the above code, you can solve the problem according to the type of the parameters. to determine whether there is an error! But there are many callback functions in Node.js, and it is impossible for us to judge whether the parameter type is wrong in every function!
Node.js stipulates that the first parameter is erro, and the second parameter is the result! If the first parameter is not empty, there is an error in the asynchronous call!
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("三轮面试都成功了!啊哈哈哈!"); }); }); });You can see that the above asynchronous process has three levels of nesting. This is just a situation where the code is relatively simple! So in actual applications, each nested function may be very complex, which makes it difficult to develop and maintain, and makes people angry when looking at it. This is the so-called ** callback hell **
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();The same variable needs to be added to each asynchronous task to capture the results of multiple asynchronous tasks
Programming video! !
The above is the detailed content of An in-depth analysis of callback in Node.js asynchronous programming. For more information, please follow other related articles on the PHP Chinese website!