Wie promisify richtig JSON.parse-Methode mit bluebird
Ich versuche, promisify JSON.parse
Methode, aber leider ohne Glück. Dies ist mein Versuch:
Promise.promisify(JSON.parse, JSON)(data).then((result: any) => {...
aber ich bekomme die folgende Fehlermeldung
Unhandled rejection Error: object
JSON.parse
ist eine sync-Funktion. Warum wollen Sie promisify es?- Denn ich möchte erstellen Sie eine Kette von Versprechungen, wo JSON.analysieren, stehen an der Spitze
- Wo ist dein
data
aus? Können Sie zeigen Sie uns Ihre vollständigen code? Gibt es vielleicht eine bessere Lösung. - bitte ändern Sie die akzeptierte Antwort auf bergi ist. Verlassen Sie falsche Antworten wie diese ist wie stackoverflow wird zu einer Quelle der miss-information und nicht hilfreich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versprechen.promisify
ist gedacht für asynchrone Funktionen, die eine callback-Funktion.JSON.parse
keine solche Funktion, so kann man nicht mitpromisify
hier.Wenn Sie möchten, erstellen Sie ein Versprechen-Rückkehr-Funktion von einer Funktion, die möglicherweise
throw
synchron,Versprechen.Methode
ist der Weg zu gehen:Alternativ können Sie nur verwenden möchten
Versprechen.resolve
starten Sie Ihre Kette:Zunächst
JSON.parse
ist nicht eine asynchrone Funktion. Also, versuchen Sie nicht zu promisify es.Dann erstellen Sie einfach ein Versprechen gelöst mit den geparsten JSON-Objekt, wie dies
Nun zu Ihrer eigentlichen Frage, Sie werden immer den Fehler,
weil Sie, wenn Ihre Kette von Versprechungen abgelehnt wird, sind Sie nicht umgehen. Also, vergessen Sie nicht zu befestigen ein catch-handler, wie diese
LESEN Sie DIESE Es gibt ein problem mit dem Ansatz, den ich hier gezeigt haben, wie bereits von der Bergischen, in die Kommentare. Wenn die
JSON.parse
- Aufruf fehlschlägt, wird der Fehler geworfen wird, synchron, und Sie müssen möglicherweise schreibentry...catch
rund um diePromise
code. Stattdessen würde man es schreiben, wie Bergi vorgeschlagen, in seine Antwort, um ein Promise-Objekt mit genau den Daten, und führen Sie dannJSON.parse
auf dieses Versprechen Kette.JSON.parse()
nennen.Spät zur party, aber ich kann Total verstehen, warum möchten Sie vielleicht ein promisified JSON-parse-Methode, die nie exceptions wirft. Wenn nichts anderes, dann entfernen boilerplate try/catch-handling in Ihren code ein. Außerdem sehe ich keinen Grund, warum synchrones Verhalten, sollte Sie nicht verpackt sein verspricht. Also hier:
Nutzung, e.g: