Register a function to be called when this future completes.
The action
function is called when this future completes, whether it
does so with a value or with an error.
This is the asynchronous equivalent of a "finally" block.
The future returned by this call, f
, will complete the same way
as this future unless an error occurs in the action
call, or in
a Future returned by the action
call. If the call to action
does not return a future, its return value is ignored.
If the call to action
throws, then f
is completed with the
thrown error.
If the call to action
returns a Future, f2
, then completion of
f
is delayed until f2
completes. If f2
completes with
an error, that will be the result of f
too. The value of f2
is always
ignored.
This method is equivalent to:
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;
});
}
Source
/**
* Register a function to be called when this future completes.
*
* The [action] function is called when this future completes, whether it
* does so with a value or with an error.
*
* This is the asynchronous equivalent of a "finally" block.
*
* The future returned by this call, `f`, will complete the same way
* as this future unless an error occurs in the [action] call, or in
* a [Future] returned by the [action] call. If the call to [action]
* does not return a future, its return value is ignored.
*
* If the call to [action] throws, then `f` is completed with the
* thrown error.
*
* If the call to [action] returns a [Future], `f2`, then completion of
* `f` is delayed until `f2` completes. If `f2` completes with
* an error, that will be the result of `f` too. The value of `f2` is always
* ignored.
*
* This method is equivalent to:
*
* 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;
* });
* }
*/
Future<T> whenComplete(action());