2016-09-09 3 views
0

Ich habe eine Hauptfunktion, die verwendet wird, um eine bestimmte Abfrage durchzuführen und die Antwort analysieren. Der erste Schritt in dieser Funktion besteht darin, die Parameter zu validieren, die dieser Funktion übergeben werden. Dann werde ich die Abfrage generieren, unterschreiben und dann senden. Zum Schluss werde ich die Antwort behandeln.NodeJS kombinieren Verkettung Synchronisierung und asynchrone Funktionen mit dann

Zum Senden der Abfrage möchte ich das Versprechen Muster verwenden. Was ich möchte, ist, dass die Hauptfunktion ein Versprechen geben würde. Das Problem ist, dass die meisten Funktionen sync und nicht async sind, also sollte ich nicht versprechen. Was ich möchte, ist etwa so:

Problem ist, dass die erste Funktion kein Versprechen gibt. Also kann ich es dann nicht mit den anderen Funktionen verketten, da das damalige Muster verspricht. Außerdem habe ich eine .catch-Funktion eine Ebene höher, die ich verwenden möchte, um Fehlerbedingungen abzufangen, die in jeder der Funktionen auftreten können, die ich anrufe. Wenn ich die erste Funktion nicht mit dem Rest verketten würde, würden Fehler, die in der ersten Funktion auftreten, nicht erfasst werden?

+2

Ja, aber Sie sollten niemals eine Zusage zurückgeben, wenn die Funktion selbst synchron ist. Sie sollten nur Zusagen für asynchrone Funktionen verwenden. –

+0

Wäre das in dieser Situation die beste Vorgehensweise? Wenn Sie ja denken, bitte posten Sie es als Antwort. Und wie man diesen asynchronen Wrapper erstellt :) –

Antwort

1

Sie können Promise.resolve() verwenden, um ein Versprechen Kette zu starten und verwenden Sie dann synchron (und möglicherweise zu werfen) als then Handler:

return Promise.resolve(attributes) 
    .then(this.validateQueryAttributes) // you might need .bind(this) 
    .then(generateQuery) 
    .then(signQuery) 
    .then(sendQuery) 
    .then(handleResponse); 

Alternativ, wenn Sie eine Bibliothek wie Drossel verwenden, können Sie auch Promise.try oder um synchrone Ausnahmen abzufangen.

Verwandte Themen