2017-10-19 7 views
1

Je reçois l'erreur suivante après avoir effectué un poste HTTP:Recursion exception liée: Impossible d'obtenir la propriété « tag » de référence non définie ou null

Impossible d'obtenir la propriété « tag » de référence non définie ou null

Je crois que l'erreur se produit lors de l'exécution de la fonction de décodeur suivant:

sourceDecoder : Decoder JsonSource 
sourceDecoder = 
    Decode.map5 JsonSource 
     ... 
     (field "Links" providerLinksDecoder) 

dépendances Decoder:

providerLinksDecoder : Decoder JsonProviderLinks 
providerLinksDecoder = 
    Decode.map JsonLinkFields 
     (field "Links" <| Decode.list (Decode.lazy (\_ -> linkDecoder))) 
     |> Decode.map JsonProviderLinks 

linkDecoder : Decoder JsonLink 
linkDecoder = 
    Decode.map6 JsonLink 
     (field "Profile" profileDecoder) 
     ... 

profileDecoder : Decoder JsonProfile 
profileDecoder = 
    Decode.map7 JsonProfile 
     ... 
     (field "Sources" <| Decode.list (Decode.lazy (\_ -> sourceDecoder))) 

Annexe:

type JsonProviderLinks 
    = JsonProviderLinks JsonLinkFields 


type alias JsonLinkFields = 
    { links : List JsonLink 
    } 

Le code source se trouve sur here.

Remarque: J'ai tenté de rechercher cette erreur et je suis tombé sur cette page. En conséquence, j'ai essayé d'utiliser la fonction Decode.lazy. Cependant, ma tentative a échoué.

+0

Êtes-vous en mesure d'inclure un (http://sscce.org/) –

+0

Je mis à jour le poste pour montrer l'essentiel. –

Répondre

1

Il y a beaucoup de décodeurs qui s'appuient sur d'autres décodeurs dans vos exemples. Vous avez modifié certains d'entre eux pour utiliser Decode.lazy, mais pas tous, et cette erreur que vous avez reçue se produira en cas de récurrence incontrôlable.

Vous n'avez pas besoin d'une liste pour pouvoir utiliser lazy. Essayez - en tant que première étape vers le débogage, au moins - pour changer tous les décodeurs qui référencent d'autres décodeurs pour utiliser Decode.lazy. Par exemple: [? Bref, autonome, par exemple compilable]

sourceDecoder : Decoder JsonSource 
sourceDecoder = 
    Decode.map5 JsonSource 
     ... 
     (field "Links" (Decode.lazy (\_ -> providerLinksDecoder))) 
+0

Voir aussi https://github.com/elm-lang/elm-compiler/issues/873 et https://github.com/elm-lang/elm-compiler/blob/master/hints/bad-recursion.md –