Dart 为什么不';t设置变量(省道)

Dart 为什么不';t设置变量(省道),dart,dart-async,Dart,Dart Async,我正在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) =>

我正在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
,那么()
但是当我试图获取var时,它返回null。

打印(parsedJSON)getString()
返回之前执行code>
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()
也必须等待它完成

否,您没有在
.then()
中设置
parsedJSON
。您正试图从空对象调用方法。在使用
parsedJSON
之前,您应该使用
=
操作符设置它,如

parsedJSON = new Map.from(JSON.decode(f));
换句话说,您混淆了parsedJSON的方法和Map的构造函数

p.S. 正如冈特所说,你可以很快写出来:

parsedJSON = JSON.decode(f);

dart async
标签下有很多类似的问题。谢谢你,伙计,我告诉你,我正在学习dart,我还在用dart学习异步编程,现在我理解了我的错误。如果这回答了你的问题,请在向上投票按钮下方用复选标记将其标记为已回答。有关Dart中异步编程的更多信息,请参见我还有一个问题,如何从另一个类访问parsedJSON并使用另一个类中的parsedJSON设置其他变量?
var th=new testHandler();th.parsedJSON={'x':'y'}
这就是你想要的吗?不,确切地说,我试图使用解析的json,在另一个类中使用它们,例如,我将编写一个函数来返回已经解析的json的一些数据,但是在另一个类中。