Future<R> then<R>(FutureOr<R> onValue(T value), {Function onError});
then
方法返回的future就是onValue或者onError返回的future,如果都没有反回,则then
方法返回的future以null值完成(then
返回的future方法会执行then处理方法)。如果onValue或者onError方法中发生其他错误,则then
返回的future以发生的错误完成(then
返回的future方法会执行error处理方法)。如果then
方法没有执行,则返回的future以this的error完成(执行的是error处理方法)。
如果this的then方法内有传递onError参数,则this的error会传递到onError方法而不是catchError。
Future<T> catchError(Function onError, {bool test(Object error)});
如果没执行onError方法,则返回future就以this(catchError方法的future)结果完成,如果执行了onError方法,则返回的future就是onError方法的return,如果没有return,则返回的future以null完成(执行then方法)。如果onError方法中发生其他错误,则catchError
返回的future以发生的错误完成(catchError
返回的future方法会执行error处理方法)Future<T> whenComplete(FutureOr action());
如果action方法中发生其他错误,则whenComplete
返回的future以发生的错误完成(whenComplete
返回的future方法会执行error处理方法)。如果action正常执行,则whenComplete
返回的future就是this
等价于:
* Future<T> whenComplete(action()) {
* return this.then((v) {
* var f2 = action();
* if (f2 is Future) return f2.then((_) => v);
* return v
* }, onError: (e) {
* var f2 = action();
* if (f2 is Future) return f2.then((_) { throw e; });
* throw e;
* });
* }