2016-06-09 6 views
0

Beginn meiner ersten signifikanten NodeJS App und ich bin unsicher, ob ich Versprechungen richtig heble. In meinem Fall sende ich eine AJAX-Anfrage und dann, wenn es fertig ist, möchte ich etwas zurückgeben (In diesem Fall senden Sie einen bestimmten Statuscode und eine Nachricht an den Browser zurück). Ich mache zusätzliche Validierung im Block, aber ich bin mir nicht sicher, ob ich dieses Recht ausführe. Jeder Einblick würde geschätzt werden.NodeJS Klarheit um Versprechen

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" 
     }); 
    }); 

ich, wie ich fühle mich falsch bin die resp.header.status in der verketteten Funktion und wirft einen Fehler zu überprüfen. Gibt es eine bessere Möglichkeit, eine benutzerdefinierte Validierung durchzuführen und einen Fehler zu melden, oder wäre dies die akzeptierte Vorgehensweise, um ein Versprechen zu verwerfen?

+0

Fragen Sie nach 'request' und ob' resp.headers.status! = "200" richtig ist, oder fragen Sie nach Versprechungen und ob 'throw 401;' angebracht ist? – Bergi

+0

Versprechen und ob Throw 401 wäre der richtige Weg zu gehen – CogitoErgoSum

Antwort

1

Ist ein Fehler die akzeptierte Praxis, ein Versprechen zu verwerfen?

Ja, ist es. Versprechen wurden entwickelt, um dies zu tun, es ist ziemlich gleichbedeutend mit dem Auslösen von Ausnahmen in einer synchronen Funktion und dem Auffangen von Ausnahmen mit einer try-Anweisung. Natürlich können Sie auch if für bedingte Validierungsaufgaben verwenden, aber werfen ist in Ordnung.

Was Sie nicht tun sollten, ist die Nummer 401, besser always throw Error objects werfen.

+0

Danke! Ich warf den 401 zur Einfachheit an dieser Stelle, aber ich stimme zu, dass ich ein richtiges Fehlerobjekt verwenden sollte, auch wenn ich mich verspotte. – CogitoErgoSum

Verwandte Themen