如果太长,有没有办法跳过等待? (扑)
Is there a way to skip await if it's too long? (Flutter)
我在 main 中使用 async await,因此用户在进入应用程序之前必须在启动画面中等待。
void main() async {
await Firebase.initializeApp();
String? x;
await FirebaseDatabase.instance.ref().child("data").once().then((snapshot) {
Map data = snapshot.snapshot.value as Map;
x = jsonEncode(data);
});
return ChangeNotifierProvider<DataModel>.value(
value: DataModel(data: x),
child: MaterialApp()
);
}
如果有用户在没有互联网连接的情况下进入应用程序,他们将永远停留在初始屏幕上。如果还有网速较慢的用户,他们会在启动画面停留更长时间。
所以不管是什么网络连接问题,我想设置最多5秒只等待,如果超过了,跳过那部分,直接进入应用程序。
您可以使用用户竞争条件或 Future.timeout
竞争条件使用 future.any
final result = await Future.any([
YourFunction(),
Future.delayed(const Duration(seconds: 3))
]);
在上面的代码中,第一个完成的人将给出结果,
因此,如果您的代码花费的时间超过 3 秒,那么其他函数将 return 回答
将您的 Firebase api 调用传递给函数,使方法 return 成为未来,
Future<String?> getData() async {
await FirebaseDatabase.instance.ref().child("data").once().then((snapshot) {
Map data = snapshot.snapshot.value as Map;
return jsonEncode(data);
});
}
然后在 main 方法上,为您创建的方法附加超时
void main() async {
await Firebase.initializeApp();
String? x = await getData().timeout(Duration(seconds: 5), onTimeout: () {
return null };
return ChangeNotifierProvider<DataModel>.value(
value: DataModel(data: x),
child: MaterialApp()
);
}
所以如果你 api 花费超过 5 秒的时间,然后它退出并且 return null
我在 main 中使用 async await,因此用户在进入应用程序之前必须在启动画面中等待。
void main() async {
await Firebase.initializeApp();
String? x;
await FirebaseDatabase.instance.ref().child("data").once().then((snapshot) {
Map data = snapshot.snapshot.value as Map;
x = jsonEncode(data);
});
return ChangeNotifierProvider<DataModel>.value(
value: DataModel(data: x),
child: MaterialApp()
);
}
如果有用户在没有互联网连接的情况下进入应用程序,他们将永远停留在初始屏幕上。如果还有网速较慢的用户,他们会在启动画面停留更长时间。
所以不管是什么网络连接问题,我想设置最多5秒只等待,如果超过了,跳过那部分,直接进入应用程序。
您可以使用用户竞争条件或 Future.timeout
竞争条件使用 future.any
final result = await Future.any([
YourFunction(),
Future.delayed(const Duration(seconds: 3))
]);
在上面的代码中,第一个完成的人将给出结果, 因此,如果您的代码花费的时间超过 3 秒,那么其他函数将 return 回答
将您的 Firebase api 调用传递给函数,使方法 return 成为未来,
Future<String?> getData() async {
await FirebaseDatabase.instance.ref().child("data").once().then((snapshot) {
Map data = snapshot.snapshot.value as Map;
return jsonEncode(data);
});
}
然后在 main 方法上,为您创建的方法附加超时
void main() async {
await Firebase.initializeApp();
String? x = await getData().timeout(Duration(seconds: 5), onTimeout: () {
return null };
return ChangeNotifierProvider<DataModel>.value(
value: DataModel(data: x),
child: MaterialApp()
);
}
所以如果你 api 花费超过 5 秒的时间,然后它退出并且 return null