我創建了兩個函式。我希望當第一個完成時,count()
該text()
功能將被執行。但它沒有按預期作業。問題出在哪里?
Future<void> count() async {
for (var i = 1; i <= 10; i ) {
Future.delayed(Duration(seconds: i), () => print(i));
}
}
Future<void> text() async{
print("Done");
}
void main() {
count().then((value) {
text();
});
}
uj5u.com熱心網友回復:
您應該await
這樣做,Future.delayed
因為它是一個異步函式。
Future<void> count() async {
for (var i = 1; i <= 10; i ) {
await Future.delayed(Duration(seconds: i), () => print(i));
}
}
輸出:
1
2
3
4
5
6
7
8
9
10
Done
uj5u.com熱心網友回復:
您必須等待 Future.delayed 并且您還需要將 Duration 更改為 1 秒:
Future<void> count() async {
for (var i = 1; i <= 10; i ) {
await Future.delayed(Duration(seconds: 1), () => print(i));
}
}
Future<void> text() async{
print("Done");
}
void main() async {
count().then((value) {
text();
});
}
uj5u.com熱心網友回復:
當有未來的事情并且您使用異步時,您必須在正文中使用帶有未來方法的等待
Future<void> count() async {
for (var i = 1; i <= 10; i ) {
await Future.delayed(Duration(seconds: 1), () => print(i)); // here
}
}
Future<void> text() async{
print("Done");
}
void main() async {
count().then((value) {
text();
});
}
uj5u.com熱心網友回復:
另一種等待所有延遲期貨的替代方法是使用Future.wait
:
Future<void> count() =>
Future.wait([for (var i = 1; i < 10; i )
Future.delayed(Duration(seconds: i), () => print(i))]);
void main() async {
await count();
print("Done");
}
這將啟動所有延遲的操作,然后等待所有這些操作。
這概括為操作不一定按照它們開始的順序完成的情況。
使用Future.wait
是等待多個并行異步操作的方式,而不是單獨等待每個操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/508492.html