NodeJS清晰承诺

时间:2016-06-09 16:01:05

标签: node.js promise

开始我的第一个重要的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并抛出错误。有没有更好的方法来进行自定义验证并抛出错误,或者这是错误承诺的公认做法?

1 个答案:

答案 0 :(得分:1)

  

抛出一个错误是错误的承诺吗?

是的,确实如此。 Promise旨在实现这一点,它非常等同于在同步函数中抛出异常并使用try语句捕获它们。当然,您也可以使用if else进行条件验证任务,但抛出是可以的。

你不应该做的是抛出号码401,更好always throw Error objects