[英]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.