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 print
aprèsjsondata
est attribué:
main() {
HttpRequest.getString('file.json').then((data) {
jsondata = JSON.decode(data);
print(jsondata);
});
}
Merci, votre explication a été très utile. –