flutter 异步
本文最后更新于:2022年4月22日 上午
flutter 异步
Dart
的异步也和 js
类似,单线程+事件循环
Future
getDataFuture()
.then((value) {
print(value);
return Future.value('2');
})
.catchError((error) {
print('error: $error');
})
.whenComplete(() => print('无论成功还是失败都会执行'))
.then((value) => print(value));
Future<String> getDataFuture() {
return Future.value('success');
return Future.error('error inifo');
return Future.delayed(Duration(seconds: 2), () => '异步获取数据');
}
async/await
getDataAsync().then((value) => print(value)).catchError((err) => print(err));
Future<String> getDataAsync() async {
try {
final res1 = await Future.delayed(Duration(seconds: 1), () => '第一个返回值');
print(res1);
final res2 = await Future.delayed(Duration(seconds: 1), () => '第二个返回值');
print(res2);
final err1 = await Future.error('error info');
} catch (err) {
print('捕获错误:$err');
}
return '最终的返回值';
}
Isolate
main(List<String> args) async {
// 创建 Isolate
Isolate.spawn(foo, 10);
}
void foo(int limit) {
int sum = 0;
for (int i = 0; i < limit; i++) {
sum += i;
}
print('sum: $sum');
}
Isolate 双通道通信
main(List<String> args) async {
ReceivePort receivePort = ReceivePort();
Isolate isolate = await Isolate.spawn<SendPort>(bar, receivePort.sendPort);
receivePort.listen((message) {
print('on: $message');
receivePort.close();
isolate.kill();
});
}
void bar(SendPort sendPort) {
sendPort.send('message');
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处。