我正在Dart中尝试此操作:
import 'dart:convert';
import 'dart:html';
class testHandler {
Map parsedJSON;
testHandler();
void Initialize(){
String rawJSON = "core/testConfiguration.json";
HttpRequest.getString(rawJSON)
.then((String f) => parsedJSON.from(JSON.decode(f)))
.catchError((Error e) => print(e.toString()));
print(parsedJSON);
}
}
如果看到我在
parsedJSON
中设置.then()
,但是当我尝试获取var时,它将返回null。 最佳答案
print(parsedJSON);
在getString()
返回之前执行。 getString()
是异步的,传递给then()
的回调有时会在getString()
返回结果后稍后执行,但print(parsedJSON);
将立即执行。
使用async
/ await
可以很容易地做到这一点:
import 'dart:convert';
import 'dart:html';
class testHandler {
Map parsedJSON;
testHandler();
Future Initialize() async {
String rawJSON = "core/testConfiguration.json";
try {
String f = await HttpRequest.getString(rawJSON);
parsedJSON = JSON.decode(f);
} catch(Error e) {
print(e.toString());
}
print(parsedJSON);
}
}
异步具有传染性,因此调用
Initialize()
的代码也必须等待其完成。