2017-09-22 3 views
0

J'essaie de mettre des données json dans une variable. Pourquoi est-ce que je reçois la valeur NULL lorsque j'imprime jsondata?Dart Demande HTTP à la variable

Quand je change jsondata à imprimer semble fonctionner très bien et quand j'utilise la commande type qu'elle confirme comme une liste. Alors qu'est-ce que je fais de mal en passant à une variable?

HttpRequest.getString('file.json').then(
(result) => print(JSON.decode(result))); //this prints fine as type list 

Répondre

1

Un HttpRequest.getString est un , qui est, il ne s'exécute pas immédiatement - il exécute un certain temps dans le futur (et le type de retour est, en retour, Future<String>). Considérez le programme suivant:

print('1'); 
getData().then((data) => print('2')); 
print('3'); 

Dans un serait temps d'exécution Dart bien comportés, cela jamais print '1' '2' '3', mais plutôt imprimer '1' '3', et peut-être print '2' si getData() ever complète (c'est-à-dire qu'aucune erreur ne se produit, aucun problème de délai d'attente/de connectivité Internet).

Dart (et autres langues) ajouté mot-clé await pour le rendre plus facile d'écrire des programmes qui semblent synchrones (c.-à ne pas utiliser les callbacks imbriquées qui sont appelées « plus tard »), mais se comportent autrement exactement la même chose que le précédent Code:

print123() async { 
    print('1'); 
    await getData(); 
    print('2'); 
    print('3'); 
} 

Le code ci-dessus, si elle est bien comportée (encore une fois, pas de délais d'attente, etc.), print '1' '2' '3' - exactement ce que vous attendiez. Maintenant, nous allons appliquer ce même modèle à votre code ci-dessus:

import 'dart:html'; 
import 'dart:convert'; 

var jsondata; 

main() async { 
    jsondata = JSON.decode(await HttpRequest.getString('file.json')); 
    print(jsondata); 
} 

Vous ne avez à utiliser await/async, mais je trouve qu'il est plus facile la plupart du temps! Si vous souhaitez conserver votre code actuel, assurez-vous d'invoquer printaprèsjsondata est attribué:

main() { 
    HttpRequest.getString('file.json').then((data) { 
    jsondata = JSON.decode(data); 
    print(jsondata); 
    }); 
} 
+0

Merci, votre explication a été très utile. –