我正在使用一个第三方库,它使用 node 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")
});
我们向第三方库报告了这个错误,他们已经修改了源代码。例如:
d.on('error', function (er) {
if (isCalled == false) {
isCalled = true;
} else {
return;
}
console.log("hi");
callback.apply(null, er);
});
现在多次调用函数的问题已经解决。但是最终回调函数从未被调用。
如何处理Node.js的这种行为?
如果第三方库修改其代码,将导致应用程序崩溃。即使使用包装域也无济于事。
d.on('error', function (er) {
if (isCalled == false) {
isCalled = true;
} else {
throw new Error("Getting called");
return;
}
console.log("hi");
callback.apply(null, er);
});
什么是在Node中处理这种情况的最佳方法?