Open huruji opened 5 years ago
Dart 中 Future 类似于 JavaScript 中的 Promise,类似于 Promise,Future 可以通过两个方式 completed,分别是 succeed 和 fail,相当于 Promise 里的 fullfilled 和 rejected。
简单的构造一个 Future 实例:
Future(() => 12)
当 Future completed 的时候可以通过 then 来执行下一步,如:
then
Future.delayed(Duration(seconds: 3), () => 12) .then((value) => value + 1) .then((value) => print(value));
最终打印 13
13
当然也可以使用 catchError 来捕获异常:
catchError
Future.delayed(Duration(seconds: 3), () => {throw 'error'}) .then((value) => print('success')) .catchError((e) { print(e); return 'future 2'; });
如果需要捕获单次 Future 实现如 Promise 如下的效果:
new Promise(resolve => resolve()).then().catch()
可以使用 then 的命名参数 onError:
onError
Future.delayed(Duration(seconds: 3), () => {throw 'error'}).then((value) { return 'success'; }, onError: (err) { return 'fail'; }).then((val) => print(val));
这时候打印 fail。
fail
除此之外,还有其他构造函数,如创建一个以 error 完成的 Future,类似于 Promise.reject
Promise.reject
Future.error((err) => 'huruji').then((value) { return 'success'; }, onError: (err) { return 'fail'; }).then((val) => print(val));
这时候打印 fail.
类似 Promise.resolve 可以使用 Future.value
Promise.resolve
Future.value
Future.value(12).then((value) { print(value); });
如果想要立即执行一个 computation 函数,可以使用 Future.sync,如果需要延迟执行可以使用 Future.delayed:
Future.sync
Future.delayed
Future.sync(() => 12).then(print); Future.delayed(Duration(seconds: 2), () => 12).then(print);
除了这些构造函数以外,一个 Future 实例还有 .then() .catchError() .whenComplete(),这些都和 Promise 类似,whenComplete 类似于 finally,此外,还有 .timeout 方法,类似于构造函数 Future.delayed:
.then()
.catchError()
.whenComplete()
whenComplete
finally
.timeout
Future(() => 12).timeout(Duration(seconds: 3)).then(print);
当然,还提供了一些对应的静态方法,Future.any 对标 Promise.race:
Future.any
Promise.race
Future.any([ Future.delayed(Duration(seconds: 2), () => 12) .then((val) => throw 'huruji'), Future.delayed(Duration(seconds: 5), () => 15) ]).then((val) => print(val), onError: (e) { print(e); print('faile'); });
Future.wait 对标 Promise.all
Future.wait
Promise.all
Future.wait([ Future.delayed(Duration(seconds: 2), () => 12), Future.delayed(Duration(seconds: 5), () => 15) ]).then((val) => print(val));
Future.doWhile 重复执行知道返回 false,
Future.doWhile
Future.forEach 顺序拿到对应的 future(同时执行只是顺序拿值而已):
Future.forEach
Future.forEach([ Future.delayed(Duration(seconds: 6), () => 12), Future.delayed(Duration(seconds: 10), () => 15) ], (f) => f.then(print));
Dart 中 Future 类似于 JavaScript 中的 Promise,类似于 Promise,Future 可以通过两个方式 completed,分别是 succeed 和 fail,相当于 Promise 里的 fullfilled 和 rejected。
简单的构造一个 Future 实例:
当 Future completed 的时候可以通过
then
来执行下一步,如:最终打印
13
当然也可以使用
catchError
来捕获异常:如果需要捕获单次 Future 实现如 Promise 如下的效果:
可以使用
then
的命名参数onError
:这时候打印
fail
。除此之外,还有其他构造函数,如创建一个以 error 完成的 Future,类似于
Promise.reject
这时候打印
fail
.类似
Promise.resolve
可以使用Future.value
如果想要立即执行一个 computation 函数,可以使用
Future.sync
,如果需要延迟执行可以使用Future.delayed
:除了这些构造函数以外,一个 Future 实例还有
.then()
.catchError()
.whenComplete()
,这些都和 Promise 类似,whenComplete
类似于finally
,此外,还有.timeout
方法,类似于构造函数Future.delayed
:当然,还提供了一些对应的静态方法,
Future.any
对标Promise.race
:Future.wait
对标Promise.all
Future.doWhile
重复执行知道返回 false,Future.forEach
顺序拿到对应的 future(同时执行只是顺序拿值而已):