开始我的第一个重要的NodeJS应用程序,我不确定我是否正确地利用了承诺。在我的情况下,我发送一个AJAX请求,然后一旦完成就想返回一些东西(在这种情况下,将特定的状态代码和消息发送回浏览器)。我在then块中进行了额外的验证,但我不确定我是否正在执行此操作。任何见解都将不胜感激。
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并抛出错误。有没有更好的方法来进行自定义验证并抛出错误,或者这是错误承诺的公认做法?
答案 0 :(得分:1)
抛出一个错误是错误的承诺吗?
是的,确实如此。 Promise旨在实现这一点,它非常等同于在同步函数中抛出异常并使用try
语句捕获它们。当然,您也可以使用if
else进行条件验证任务,但抛出是可以的。
你不应该做的是抛出号码401
,更好always throw Error
objects。