作为节点程序员。我习惯于使用“ nodebacks”来处理代码中的错误:
myFn(param, function(err, data) {
if (err){
//error handling logic
}
else {
// business logic
}
});
编写该函数时,我可以执行以下操作:
var myFn = function(param, callback){
var calc = doSomeCalculation(param);
if(calc === null) { // or some other way to detect error
callback(new Error("error with calculation"), null);
}
...
someAsyncOp(calcN,function(err, finalResult){
if(err) return callback(err, null);
callback(null, finalResult); // the error is null to signal no error
});
};
我如何用promises处理这种错误?
每当您对如何使用Promise有所疑问时,请考虑一下同步版本。
try{
var result = myFn(param);
// business logic with result
} catch(e) {
//error handling logic
}
至少对我来说,这比第一个参数有时是的回调要干净得多null
。
promises方式几乎总是与问题的同步版本非常相似:
myFn(param).then(function(result){
// business logic with result
}).catch(function(e){
//error handling logic
});
使用回调函数时,myFn看起来像什么:
var myFn = function(param){
return new Promise(function(resolve, reject){
var calc = doSomeCalculation(param);
if(calc === null) { // or some other way to detect error
reject(new Error("error with calculation"), null);
}
someAsyncOp(calcN,function(err, finalResult){
if(err) reject(err);
resolve(finalResult);
})
});
};
这只是在使用回调时应做的事情,在使用promises时要简单得多,并且可以执行以下操作:
var myFn = function(param){
var calc = doSomeCalculation(param);
...
return someAsyncOp(calcN); // returning a promise.
}
此外,当在promise链中工作时,您将获得抛出安全性:
myFn(param).then(function(calcN){
// here, you throw to raise an error and return to resolve
// new Promise should be used only when starting a chain.
}).catch(function(err){
// handle error
}).then(function(){
// ready to go again, we're out of the catch
});
请注意,诸如 Bluebird ,
RSVP
和
Q之
类的某些库提供语法糖和方法的自动实现,因此您几乎不必使用new Promise
自己。
另外,还要考虑读这个和那个,详细了解承诺的错误处理。
问题内容: 我正在尝试用正确的方法表示正确的方法,以指示内发生故障。 如果诺言没有失败,(即返回诺言的操作是否正常工作,例如返回状态200的AJAX请求),但是我认为结果无效,通常我会这样做弹出窗口,向用户说明问题,然后执行“返回假”;尽早退出该方法。 但是,有了承诺,如果我想从.then()内部做类似的事情,我就被引导去相信我应该做的是抛出一个错误,而应该让它被.catch()抓住。 ),我已经
问题内容: 版本7中的Node.js具有用于处理promise的async / await语法糖,现在在我的代码中经常出现以下警告: 不幸的是,没有提到丢失渔获物的那一行。有没有找到所有方法而不检查每个try / catch块的方法? 问题答案: 监听进程事件。
问题内容: 在我的服务器应用程序中,当用户无权访问端点时,我想返回“禁止”值。 为此,我创建了一个被拒绝的重用承诺: 然后在应用程序中的其他位置: 但是,当我启动我的应用程序时,会收到警告 我怎么能告诉Node这个Promise可以解决呢? 问题答案: 我创建了被拒绝的重用承诺 好吧,仅创建一个可重用的函数可能会容易得多: 每次调用该错误时,也会为该错误提供适当的堆栈跟踪。 我怎么能告诉Node这
问题内容: 我对诺言仍然还很陌生,目前正在使用蓝鸟,但是在我不确定如何最好地处理它的情况下。 因此,举例来说,我在Express应用程序中有一个Promise链,如下所示: 所以我的行为是: 通过ID获取帐户 如果此时存在拒绝,请炸开并返回错误 如果没有错误,则将文档转换为模型 使用数据库文档验证密码 如果密码不匹配,则炸开并返回其他错误 如果没有错误,请更改密码 然后返回成功 如果有其他问题,请
问题内容: 我对诺言仍然相当陌生,并且目前正在使用蓝鸟,但是在我不确定如何最好地处理它的情况下。 因此,例如,我在快速应用程序中有一个promise链,如下所示: 所以我的行为是: 通过ID获取帐户 如果此时存在拒绝,请炸毁并返回错误 如果没有错误,则将文档转换为模型 使用数据库文档验证密码 如果密码不匹配,则炸开并返回其他错误 如果没有错误,请更改密码 然后返回成功 如果还有其他问题,请返回50
问题内容: 我知道如何处理Promise中的特定错误,但有时我会看到一些类似以下的代码: 有时,我收到无效的JSON,这会在 s 时导致无提示失败。总的来说,我必须记住在代码中的每个promise中都添加一个处理程序,而当我不这样做时,我将无法找出我忘记了什么的地方。 如何在代码中找到这些被抑制的错误? 问题答案: 在现代NodeJS中 从io.js 1.4和Node 4.0.0开始,您可以使用以