Wie man JSON.parse-Methode mit bluebird richtig promisifiziert

8

Ich versuche JSON.parse method zu promiden, aber leider ohne Glück. Das ist mein Versuch:

%Vor%

aber ich bekomme den folgenden Fehler

%Vor%     
Mazzy 31.08.2015, 10:42
quelle

3 Antworten

13

Promise.promisify ist für asynchrone Funktionen gedacht, die eine Callback-Funktion haben. JSON.parse ist keine solche Funktion, daher können Sie promisify hier nicht verwenden.

Wenn Sie eine Funktion zum Zurückgeben von Versprechen von einer Funktion erstellen möchten, die möglicherweise throw synchron ist, Promise.method ist der Weg zu gehen:

%Vor%

Alternativ können Sie auch Promise.resolve verwenden, um Ihre Kette zu starten:

%Vor%     
Bergi 31.08.2015, 11:30
quelle
7

Zunächst ist JSON.parse keine asynchrone Funktion. Versuchen Sie also nicht Promistifizieren .

  

Weil ich eine Kette von Versprechen erstellen möchte, in der JSON.parse ganz oben steht

Erstellen Sie dann einfach eine Promise, die mit dem analysierten JSON-Objekt aufgelöst wurde, wie dies hier beschrieben wird.

%Vor%

Nun zu Ihrer eigentlichen Frage, Sie erhalten den Fehler,

%Vor%

Denn wenn Ihre Kette von Versprechen abgelehnt wird, behandeln Sie sie nicht. Also, vergiss nicht, einen catch-Handler anzuhängen, wie dies

%Vor%

LESEN SIE DIESES Es gibt ein Problem mit dem Ansatz, den ich hier gezeigt habe, wie Bergi in den Kommentaren darauf hingewiesen hat. Wenn der Aufruf JSON.parse fehlschlägt, wird der Fehler synchron ausgelöst und Sie müssen möglicherweise try...catch um den Promise -Code schreiben. Stattdessen würde man es schreiben, wie Bergi in seine Antwort vorgeschlagen hat, um ein Promise-Objekt mit nur den Daten zu erstellen, und dann tun JSON.parse für diese Promise-Kette.

    
thefourtheye 31.08.2015 10:47
quelle
2

Spät zur Party, aber ich kann total verstehen, warum Sie eine promisified JSON-Analysemethode wünschen, die Ausnahmen nie wirft. Wenn für nichts anderes, dann zu versuchen, zu entfernen, versuchen Sie, / catch-handling von Ihrem Code. Ich sehe auch keinen Grund, warum synchrones Verhalten nicht in Versprechen gehüllt werden sollte. Also hier:

%Vor%

Verwendung, z. B .:

%Vor%     
mtkopone 23.02.2017 10:42
quelle