2017-05-01 2 views
0

Ich habe Schwierigkeiten, eine Antwort auf meine Frage zu finden, vielleicht weil ich nicht weiß, wie ich sie stellen soll (welche Suchbegriffe ich verwenden soll). Ich habe wirklich Schwierigkeiten, Versprechungen zu verstehen, habe mir eine Reihe von Tutorial-Videos angeschaut und bekomme immer noch kein grundlegendes Stück, um es zu klicken.Eine Verheißung in eine innere Funktion einhüllen/abfangen

In Node verwende ich das Anfrage-Versprechen-Modul, das ein Versprechen zurückgibt, wenn ich eine rp() -Methode anrufe. Ich rufe zurück rp (Service); innerhalb einer Funktion. Aber was ich tun möchte, ist stattdessen, fügen Sie einen .then() - Handler zu diesem einige Nachbearbeitung mit dem Ergebnis des Service-Aufrufs zu tun, BEVOR Sie das Versprechen zurück an den Anrufer, so dass der Anrufer kann immer noch eigene dann haben Handler.

Wie bewerkstellige ich das?

+0

Vielleicht könnten Sie uns etwas von Ihrem Code zeigen? – TGrif

+0

'zurück rp (Dienst) .then (...)'? Beachten Sie, dass 'then' ein anderes Versprechen für das Ergebnis des Rückrufs zurückgibt. – Bergi

Antwort

0

Es wäre hilfreich, Ihren aktuellen Code zu sehen, um besser zu verstehen, wo genau Sie kämpfen.

Im Allgemeinen können Sie Versprechungen als Platzhalter für einen zukünftigen Wert vorstellen, den Sie verketten können.

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie eine Anfrage an einen Server richten, die Antwort erhalten, etwas mit der Antwort tun und sie an den Anrufer zurücksenden.

const callService = (url) => { 
    // make sure to return your promise here 
    return rp(url) 
    .then((html) => { 
     // do something with html 
     return html; 
    }); 
}; 

Jetzt können Sie es wie so nennen -

callService('http://www.google.com') 
    .then((html) => { 
    console.log(html); 
    }).catch((err) => { 
    // error handling 
    }); 

Der häufigste Fehler ist die Rückkehr-Anweisung in der Top-Level-Funktion und nachfolgende dann Funktionen wegzulassen.

Fühlen Sie sich frei, zusätzliche Details zur Verfügung zu stellen.

+0

Danke - das war es, was ich versuchte zu tun. Ich wusste nicht, dass es so einfach war, auf einem .then, wo ich gerade war, zurückzukehren (url). Das funktioniert einfach. :) – user1588877

+0

@ user1588877 Kein Problem! Es braucht ein bisschen, um sich daran zu gewöhnen, aber sobald Sie den Dreh raus haben, ist es so viel schöner als Rückrufe. Stellen Sie nur sicher, dass Sie immer zwischen und auf der obersten Ebene zurückkehren. Versuche async/warte als nächstes! – alpeware

Verwandte Themen