我知道我的问题措辞不好,但我正在努力理解期货,以及async
和await
的运算,感觉我甚至不够理解提出这个问题!当我运行此代码时:
import 'dart:io';
void main() async {
clickLink();
sendGet();
String r = await response();
useResponseString(r);
done();
}
void clickLink() => print('link clicked');
void sendGet() => print('sending get');
Future<String> response() async {
print('awaiting response...');
var time = Duration(seconds:2);
await Future.delayed(time).then((v){
print('got response');
return 'responseString';
});
return 'error';
}
void useResponseString(String s) {
print('using $s');
}
void done()=>print('done');
我得到
link clicked
sending get
awaiting response...
然后两秒钟后
got response
using error
done
当我逐行浏览这段代码时,我不明白为什么response()
返回"Error"而不是"ResponseString".
如果我将函数更改为
Future<String> response() async {
print('awaiting response...');
var time = Duration(seconds:2);
await Future.delayed(time).then((v){
useResponseString('responseString);
return 'responseString';
});
return 'error';
}
我得到
link clicked
sending get
awaiting response...
然后两秒钟后
using responseString
using error
done
.then()
函数在2秒后运行,像我预期的那样调用useResponseString
(是的),但主函数对useResponseString
的调用再次返回值"Error"而不是"ResponseString".我遗漏了什么?