타사 라이브러리를 사용하고 있습니다. 어떤 노드가 오류 처리를 위해 노드 domain
을 사용하고 있습니다. 해당 타사 라이브러리에 전달 된 콜백 함수에 오류가 있으면 최종적으로 콜백을 여러 번 호출합니다.도메인이있는 노드에서 적절한 오류 처리를 수행하는 방법은 무엇입니까?
예제 코드는 다음과 같습니다
var startFunction = function (callback) {
//Call thirdParty function and wait for response
thirdPartyFunction(function (error, data) {
console.log("Called with");
console.log(arguments);
//Assume there is an error in my callback function
setTimeout(function() {
dd
callback.apply(null);
}, 2000);
});
}
//ThirdParty function don't modify anything here
var thirdPartyFunction = function (callback) {
var Domain = require("domain");
var d = require('domain').create();
d.on('error', function (er) {
console.log("hi");
callback.apply(null, er);
});
d.run(function() {
setTimeout(function() {
callback.apply(null, [null, "Hello"]);
}, 1000);
});
};
startFunction(function() {
console.log("Got response")
});
우리는 타사 lib 디렉토리에이 버그를보고하고 소스 코드를 수정했습니다. 마찬가지로 :
d.on('error', function (er) {
if (isCalled == false) {
isCalled = true;
} else {
return;
}
console.log("hi");
callback.apply(null, er);
});
이제 기능의 문제라고하기를 여러 번 해결된다. 그러나 최종 콜백은 결코 호출되지 않습니다.
노드의 동작을 어떻게 처리합니까?
제 3 자의 lib가 코드를 수정하면 응용 프로그램이 중단됩니다. 래퍼 도메인을 두는 것도 도움이되지 않습니다.
d.on('error', function (er) {
if (isCalled == false) {
isCalled = true;
} else {
throw new Error("Getting called");
return;
}
console.log("hi");
callback.apply(null, er);
});
노드에서 이러한 사례를 전달하는 가장 좋은 방법은 무엇입니까?
isCalled 수정이 작동하지 않는 이유는 무엇입니까? 설정은 어디입니까? 콜백이 호출되면 설정되지 않습니까? – Murukesh