NodeJS清晰的承诺
问题描述:
开始我的第一个重要的NodeJS应用程序,我不确定我是否正确使用promise。在我的情况下,我发送一个AJAX请求,然后一旦完成想要返回一些东西(在这种情况下,发回一个特定的状态码和消息到浏览器)。我正在做的额外验证在当时的块,但我不知道我是否执行这个权利。任何洞察力将不胜感激。NodeJS清晰的承诺
var Promise = require("bluebird");
var request = Promise.promisify(require("request"));
Promise.promisifyAll(request);
...
request({
url: 'https://my.url.com', //URL to hit
method: 'POST',
headers: {
'Content-Type': 'MyContentType',
'Custom-Header': 'Custom Value'
},
body: jsonStringVar //Set the body as a string
}).then(function (resp) {
if(resp.headers.status != "200") {
throw (401)
}
console.log(resp);
console.log(resp.headers.status);
res.status(201);
res.json({
"status": "Success"
});
}).catch(function (err) {
console.log(err)
res.status(500);
res.json({
"status": "bam"
});
});
我觉得我错误地检查链接的功能resp.header.status并抛出一个错误。有没有更好的方式来做自定义验证和抛出错误,或者这是被接受的做法错误的承诺?
答
抛出错误是错误的承诺吗?
是的。 Promise被设计为这样做,这相当于在异步函数中抛出异常并使用try
语句捕获异常。当然,你也可以使用if
其他的条件验证任务,但抛出是好的。
你不应该做的是扔数401
,更好always throw Error
objects。
+0
谢谢!为了简单起见,我现在更倾向于使用401,但同意应该在模拟中使用适当的错误对象。 – CogitoErgoSum
您是否在询问'request'以及'resp.headers.status!=“200”'是否正确,或者您是否在询问promise以及“throw 401;'是否合适? – Bergi
承诺和401是否会是合适的路线 – CogitoErgoSum