Comment promisify correctement JSON.méthode d'analyse avec bluebird
Je suis en train de promisify JSON.parse
méthode, mais malheureusement sans succès. C'est ma tentative:
Promise.promisify(JSON.parse, JSON)(data).then((result: any) => {...
mais j'obtiens l'erreur suivante
Unhandled rejection Error: object
JSON.parse
est une fonction de synchronisation. Pourquoi voulez-vous promisify?Parce que je veux créer une chaîne de promesses où JSON.analyser se trouve au-dessus
Où est votre
data
en venir? Pouvez-vous nous montrer ton code complet? Il y a peut être une meilleure solution.s'il vous plaît changer la accepté de répondre à bergi. Laissant les réponses incorrectes comme c'est de cette façon stackoverflow devient une source de miss-information plutôt qu'à l'utile.
OriginalL'auteur Mazzy | 2015-08-31
Vous devez vous connecter pour publier un commentaire.
Promesse.promisify
est pensé pour asynchrone des fonctions qui prennent une fonction de rappel.JSON.parse
est pas une telle fonction, de sorte que vous ne pouvez pas utiliserpromisify
ici.Si vous souhaitez créer une promesse de retour de la fonction à partir d'une fonction qui pourrait
throw
de façon synchrone,Promesse.méthode
est le chemin à parcourir:Alternativement, vous voulez juste utiliser
Promesse.résoudre
pour commencer votre chaîne:OriginalL'auteur Bergi
Tout d'abord,
JSON.parse
n'est pas une fonction d'asynchrone. Donc, n'essayez pas de promisify.Ensuite, il suffit de créer une Promesse résolu avec l'analyse d'objet JSON, comme ce
Maintenant, à votre question, vous obtenez l'erreur,
parce que, si votre chaîne de promesses est rejetée, vous n'êtes pas de la manipulation. Alors, n'oubliez pas de joindre un gestionnaire catch, comme ce
LIRE CE Il y a un problème avec l'approche que j'ai montré ici, comme l'a souligné Bergi, dans les commentaires. Si le
JSON.parse
appel échoue, alors l'erreur sera renvoyée de façon synchrone et vous pourriez avoir à écriretry...catch
autour de laPromise
code. Au lieu de cela, on pourrait écrire comme Bergi suggéré dans sa réponse, pour créer un objet promise avec seulement les données, et ensuite faireJSON.parse
sur la Promesse de la chaîne.JSON.parse()
appel.À bien y penser, ma réponse c'est parfaitement inutile. Merci de remarquer.
OriginalL'auteur thefourtheye
La fin de la partie, mais je peux tout à fait comprendre pourquoi vous voudrez peut-être un promisified JSON méthode d'analyse qui ne lève des exceptions. Si rien d'autre, puis retirer standard try/catch-manipulation à partir de votre code. Aussi, je ne vois pas pourquoi synchrone comportement ne devrait pas être enveloppé dans les promesses. Donc ici:
De l'utilisation, de l'e.g:
Oui, bien sûr. C'est pourquoi le try/catch est là. Et c'est pourquoi il est géré par le rejet de la promesse, de sorte que la promesse gainé de version de l'analyse JSON ne pas jeter synchrone des exceptions, mais au lieu de cela rejette la promesse, comme il se doit dans la promesse-terre.
Je suis désolé. Je m'ennuie de lire votre première phrase. Le lire à nouveau et je vois votre réponse est très bien. Des excuses.
OriginalL'auteur mtkopone