我正在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()的代码也必须等待其完成。

07-24 09:50