gpt4 book ai didi

javascript - Q :then callback? 中的静默异常

转载 作者:行者123 更新时间:2023-11-28 00:04:51 24 4
gpt4 key购买 nike

我在 Q.promise 的“then”回调中调用 null 变量的函数时遇到一些问题。

第一个调用(不使用 Q)将显示错误,但第二个调用(不使用 Q)不会显示错误。

小例子:

var Q = require('q');
var nul = null;
var exp;

(function (exp) {
var A = (function () {
function A() {
};
A.prototype.foo = function () {
var d = Q.defer();
d.resolve('Hello, world');
return d.promise;
};
A.prototype.bar = function (i) {
switch (i) {
case 0:
/**
* That's all ok, "TypeError: Cannot read property 'qqq' of null"
*/
console.log(nul);
nul.qqq();
console.log('ok');
break;
case 1:
/**
* it's not ok, I see only result of "console.log(nul)", line 29
*/
this.foo().then(function () {
console.log(nul);
nul.qqq();
console.log('ok');
});
break;
};
};
return A;
})();
exp.A = A;
}) (exp || (exp = {}));

exp.a = new exp.A();
// You should run functions SEPARATELY!!!
exp.a.bar(0); // in that case: that's all ok, "TypeError: Cannot read property 'qqq' of null"
exp.a.bar(1); // int that case: it's not ok, I see only result of "console.log(nul)", line 29

我不知道如何解决

最佳答案

您在控制台上没有看到第二个错误的原因是因为 Q 捕获了所有错误并让您单独处理它们。

您可以通过链接 catch() 函数来处理 then() 中的错误,在您的示例中可以通过以下方式完成:

this.foo().then(function () {
console.log(nul);
nul.qqq();
console.log('ok');
}).catch(function(error) {
// do something with error
console.log(error);
});

您也可以通过在 then() 内使用 try/catch block 来获得此行为,如下所示:

this.foo().then(function () {
try {
console.log(nul);
nul.qqq();
console.log('ok');
} catch (e) {
console.log(e);
}
});

旧答案

以下是捕获 JS/node.js 中的错误的一些选项:

尝试/捕获 block

这些工作方式与 Java/C# 中的等效方式类似,使用 try block 包装您进行的每个调用并捕获错误,并在 catch block 中处理它

try {
exp.a.bar(0);
} catch(e) {
console.log(e);
}

您还可以添加finally block ,检查异常/错误的类型等,您可以在MDN page上阅读更多相关信息。

Node.js uncaughtException 处理程序

在节点中,您可以通过将回调绑定(bind)到 uncaughtException 事件来捕获所有 Uncaught Error ,这将停止您的程序,如下所示:

process.on('uncaughtException', function (e) {
console.log('Error: ' + e);
});

这并不总是程序中最好的做法,但如果您确实不想停止执行,这是一个选项。

最后,我建议看看这个 official article有关处理 Node.js 中的错误的最佳实践

关于javascript - Q :then callback? 中的静默异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31446903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com