asynchronous - 如何获取 HttpRequest 的结果?
问题描述
我正在使用 dart 为移动设备编写游戏。我的级别配置存储为 json。通过httpRequest
我从服务器获取 JSON,然后解析我的 json。它应该创建一个关卡对象。我想在我的模型中使用它。但我不能将它分配给我的模型中的 level-reference (model.level)
。在HttpRequest
它的值仍然相同(null
)之后。我的想法也是使用一些回调艺术,但我不知道如何......
static void load(final int levelNr, Game model) {
final String path = "../json/$levelNr.json";
HttpRequest.getString(path).then((lvlJson) {
Map data = JSON.decode(lvlJson);
Level level = _levelFromMap(data);
model.level = level;
});
}
解决方案
您可以使用callback
或async await
1. 回调
static void load(final int levelNr, void callbackFunction(Level level)) {
final String path = "../json/$levelNr.json";
HttpRequest.getString(path).then((lvlJson) {
Map data = JSON.decode(lvlJson);
Level level = _levelFromMap(data);
callbackFunction(level);
});
}
用法:
load(levelNrValue, (level) {
model.level = level;
//refresh view or data to reflect the change in model.
})
2.异步和等待
static Future<Level> load(final int levelNr) async {
final String path = "../json/$levelNr.json";
final response = await HttpRequest.getString(path);
Map data = JSON.decode(lvlJson);
return _levelFromMap(data);
}
用法:
1)在调用处使用回调:
load(levelNrValue).then((level) {
model.level = level;
//refresh view or data to reflect the change in model.
});
2)在调用位置也使用异步:
final level = await load(levelNrValue);
model.level = level;
注意:以上两行应该在一些异步方法中。
void loadDate(int levelNrValue, Game model) async {
final level = await load(levelNrValue);
model.level = level;
//refresh view or data to reflect the change in model.
}