gpt4 book ai didi

dart - 在Dart中使用 future

转载 作者:行者123 更新时间:2023-12-03 03:08:17 25 4
gpt4 key购买 nike

为什么打印结果总是返回“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,您无需明确地返回 future 。
async / await不会使异步代码同步(如上所述),它只能使 看起来像,更像同步代码。基本行为与 then相同。

关于dart - 在Dart中使用 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38625649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com