Non-blocking I/O의 연산 결과를 수신하려면 콜백 함수가 필요합니다. 다음 글에서는 비동기 프로그래밍의 Node.js콜백(콜백)에 대해 자세히 소개합니다.
【추천 학습: "nodejs tutorial"】
비차단 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에서 전역 오류는 매우 심각한 문제이며 프로그램 충돌을 일으킬 수 있습니다! try catch
并不能捕获 throw new Error('fail')
抛出的错误!,而是抛出到了 JS 全局! 在 Node.js 中,全局错误时非常严重的事情,会造成程序的崩溃!
为什么没 try catch
无法捕获 setTimeout 里面的 throw
呢? 这就跟调用栈 和 事件循环有关系了!
每一个事件循环都是一个全新的调用栈! setTimeout
왜 setTimeout에서 throw
를 try catch
하여 캡처할 수 없나요? 이는
및 event loop과 관련이 있습니다!
모든 이벤트 루프는 완전히 새로운 호출 스택이며 인터뷰는 두 가지 다른 이벤트 루프입니다!하지만 이 문제는 콜백 함수에서 매개변수에 오류를 던지는 것으로 해결될 수 있습니다
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에는 콜백 함수가 너무 많아서 모든 함수에서 매개변수 유형이 잘못된지 판단하는 것은 불가능합니다!
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("三轮面试都成功了!啊哈哈哈!"); }); }); });
위의 비동기 프로세스가 세 개의 레이어에 포함되어 있는 것을 볼 수 있습니다. , 이것은 코드가 비교적 간단한 경우입니다! 그래서 실제 애플리케이션에서는 각각의 중첩된 함수가 매우 복잡하여 개발 및 유지 관리가 어렵고, 보고 있으면 사람들이 화를 내는 일명 **콜백 지옥**
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();
위 내용은 Node.js 비동기 프로그래밍의 콜백에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!