我在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。
答案 0 :(得分:2)
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);
}
}
Async具有传染性,因此代码调用Initialize()
也必须等待它完成。
答案 1 :(得分:0)
不,您没有在parsedJSON
中设置.then()
。您正在尝试从null对象调用方法。在使用parsedJSON
之前,您应该使用=
运算符进行设置,例如
parsedJSON = new Map.from(JSON.decode(f));
换句话说,你混合了parsedJSON的方法和Map的构造函数。
<强> P.S。强> 而且,正如冈特所说,你可以写一下:
parsedJSON = JSON.decode(f);