为什么打印结果不断返回“asd”?使用带飞镖的期货
var jerl = "asd";
HttpRequest.request('Foo',
method: "GET",
requestHeaders: {"Authorization": "Secret"}).then((x) => x.responseText).then((y) => jerl = y);
print(jerl);
为什么打印结果不断返回“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:]。
如果您希望在异步代码完成,你需要IT连锁与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()
。
With async
/await
您不需要明确地返回未来。
async
/await
不会使异步码同步(如上所述),它仅使得它看起来更像同步码。基本行为与then
相同。
真的很好的破败!谢谢! – BluishMicrobe
这看起来不像angularjs代码.... – Claies
必须已经下意识地添加它 – BluishMicrobe