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并抛出一个错误。有没有更好的方式来做自定义验证和抛出错误,或者这是被接受的做法错误的承诺?

+0

您是否在询问'request'以及'resp.headers.status!=“200”'是否正确,或者您是否在询问promise以及“throw 401;'是否合适? – Bergi

+0

承诺和401是否会是合适的路线 – CogitoErgoSum

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

是的。 Promise被设计为这样做,这相当于在异步函数中抛出异常并使用try语句捕获异常。当然,你也可以使用if其他的条件验证任务,但抛出是好的。

你不应该做的是扔数401,更好always throw Error objects

+0

谢谢!为了简单起见,我现在更倾向于使用401,但同意应该在模拟中使用适当的错误对象。 – CogitoErgoSum