Q中的静默异常:然后回调
Silent exceptions in Q:then callback?
我在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块来获得这种行为,像这样:
this.foo().then(function () {
try {
console.log(nul);
nul.qqq();
console.log('ok');
} catch (e) {
console.log(e);
}
});
<标题>老回答下面是一些在JS/node.js中捕捉错误的选项:
Try/Catch块这些工作就像在他们的Java/c#等效,包装你用try
块和捕获错误的每个调用,在catch
块处理它
try {
exp.a.bar(0);
} catch(e) {
console.log(e);
}
您还可以添加finally块,检查异常/错误的类型等等,您可以在MDN页面上阅读更多信息
Node.js uncaughtException handler
在node中,您可以通过将回调绑定到uncaughtException
事件来捕获所有未捕获的错误,这些错误将停止您的程序:
process.on('uncaughtException', function (e) {
console.log('Error: ' + e);
});
这在程序中并不总是最好的,但是如果你真的不想停止执行,这是一个选项。
最后,我建议大家看看这篇官方文章,了解如何处理node.js中的错误
标题>相关文章:
- 加载文件,然后调用回调函数
- 等待 MongoDB findOne 回调完成,然后再完成 app.get()
- 如何运行一个调用某个函数的函数首先完成它,然后再调用下一个函数.正在创建回调函数
- 异步加载ASP.NET绑定的Javascript,然后调用回调
- 外部回调-然后如何回调到客户端
- 首先触发一组函数,然后回调到最后一个函数
- 如何在 $ 中执行异步操作.延迟,然后失败过滤回调并传递回成功链
- 延迟链接 - 然后在上一个调用完成但出现错误时调用成功回调
- 访问'这'promise回调中的对象(然后)
- 乙烯基fs(gump文件流)未完成.dest写入,然后启动回调或promise
- 如何使用javascript在Usercontrol中找到ASPxGridView,然后命令它执行回调
- 一个脚本,用于预加载图像,然后在图像加载时触发回调
- 寻找一个JS插件或jQuery函数,等待用户暂停输入文本字段,然后进行回调
- 创建Javascript函数,然后回调它
- 如何正确插入回调函数,使一个函数结束,然后执行另一个函数
- 如何将一个值传递给AngularJS的$http然后回调
- ' fetch ', work with mode ' no-cors '不会调用promise.然后回调
- Q中的静默异常:然后回调
- 角度承诺然后回调不会在chrome.storage.local.get上触发
- Typescript语法angular2承诺然后回调