繁体   English   中英

在Dart中使用期货

[英]Using Futures with Dart

为什么打印结果总是返回“ asd”?

      var jerl = "asd";

  HttpRequest.request('Foo',
    method: "GET",
    requestHeaders: {"Authorization": "Secret"}).then((x) => x.responseText).then((y) => jerl = y);

  print(jerl);

异步代码只是安排在以后执行,同步代码将继续执行而无需等待异步代码。 计划的异步代码完成后,将执行传递给Future.then(...)的方法。 您可以在StackOverflow上找到很多标记为[:dart-async:]的此类问题和示例。

如果要在异步代码完成后执行代码, then需要将其链接起来,就像处理其他代码一样

var jerl = "asd";

HttpRequest.request('Foo',
  method: "GET",
  /* return */ requestHeaders: {"Authorization": "Secret"})
  .then((response) {
    var jer1 = x.responseText;
    print(jerl);
  });

您可以使用async / await功能使代码看起来更像同步代码

Future someMethod() async { // <== added `Future` and `async`
  var jerl = "asd";

  var response = await HttpRequest.request('Foo',  // <== added `await`
    method: "GET",
    requestHeaders: {"Authorization": "Secret"}).then((x) => 
  print(response.text);
}

async会传染。 没有办法从异步执行返回到同步执行。 如果您的代码调用了任何异步方法或函数,并且您需要进一步的代码以等待异步结果,则需要将所有后续代码(也在调用方法中)与.then (或使用async / await )。 为此,您还需要将将来return给调用方,以便他可以在其上调用.then()

使用async / await您无需显式返回未来。

async / await不会使异步代码同步(如上所述),只会使其看起来更像同步代码。 基本行为与then相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM