首页 > 解决方案 > 如何阻塞直到异步函数完成

问题描述

如何在同步方法中继续执行之前获得异步调用的结果。例如,

main(List<String> arguments) {
    String r;
    value().then((s) => r = s);
    print(r); // prints 'null', how to get 'foo'?
}

Future<String> value() async {
    return await "foo";
}

我知道我可以标记主异步并调用await value(),但我希望主保持同步。知道怎么做吗?

更具体的例子,

class MyWidget extends StatefulWidget {
  @override
  MyWidgetState createState() => MyWidgetState();
}

class MyWidgetState extends State<MyWidget> {
    String emp;
    MyWidgetState() {
        emp = getEmployee(); // this needs to be called with await
    }

    @override
    Widget build(BuildContext context) {
        // use 'emp' to build widget
    }
}

static Future<String> getEmployee() async {
    var response = await http.get(url);
    if (response.statusCode != 200) {
        throw HttpException("read error");
    }
    return response.body;
}

标签: flutterdart

解决方案


推荐阅读