2017-01-18 4 views
0

ich den Knoten Anfrage Bibliothek bin mit der unter folgendem Link zu finden sindKnoten anfordern Bibliothek - Versprechen Refactoring

https://github.com/request/request

ich eine Reihe von Funktionen haben, die wie folgt

aussehen
function doRequest() { 

    return new Promise(function(resolve,reject) { 

     request('some-url', function(error,response,body) { 

       if (!error && response.statusCode === 200) { 
        resolve(body) 
       } 
     }); 

    }); 

} 

Ich rufe diese Funktionen dann wie folgt an:

doRequest() 
    .then(function(response){ 
     console.log(response); 
    }) 

Meine Frage ist, gibt es eine Möglichkeit, meine doRequest-Funktion zu schreiben, ohne ein neues Versprechen erstellen zu müssen? Ich habe das Gefühl, dass es unbeholfen aussieht und möglicherweise ein Anti-Muster sein könnte? Eine Art, wie in AngularJS Sie oft sehen, wie Menschen

$q.defer() 

verwenden, wenn http Anrufe tätigen, wenn der HTTP-Aufruf bereits ein Versprechen zurück.

Jeder Rat wäre toll.

+0

Nein, das ist der richtige Weg, es selbst zu tun und ist kein Anti-Muster, obwohl es mich nicht überraschen würde zu finden, dass jemand es bereits ermöglicht hat, diese Bibliothek Promisify zu machen. – Alnitak

+0

Tatsächlich gibt es im Git Repo bereits Testfälle für die Verwendung von Promisify mit 'Anfrage' – Alnitak

+0

Danke für die Antwort. Lassen Sie das Zurückweisungsbit der Kürze halber aus! – user2085143

Antwort

1

Wenn Sie auf der Grundlage der Ergebnisse der Methode request() manuell Versprechungen machen möchten, ist dies der richtige Weg (obwohl ein Anruf bei Fehler erforderlich ist).

Allerdings diese Anfrage Bibliothek bereits appears to support die Bluebird Promise-Bibliothek Promisify Funktion, die diese Funktionen automatisch in diejenigen, die Versprechen zurückgeben können.