2016-06-09 94 views
0

開始我的第一個重要的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

回答

1

拋出錯誤是錯誤的承諾嗎?

是的。 Promise被設計爲這樣做,這相當於在異步函數中拋出異常並使用try語句捕獲異常。當然,你也可以使用if其他的條件驗證任務,但拋出是好的。

你不應該做的是扔數401,更好always throw Error objects

+0

謝謝!爲了簡單起見,我現在更傾向於使用401,但同意應該在模擬中使用適當的錯誤對象。 – CogitoErgoSum