Index: lib/coreimpl/future_implementation.dart |
diff --git a/lib/coreimpl/future_implementation.dart b/lib/coreimpl/future_implementation.dart |
index 328c88964c6be89f44914b7bdddb32a12102758e..999013ec5bd198180966c7a283ef84c50fcbfbb1 100644 |
--- a/lib/coreimpl/future_implementation.dart |
+++ b/lib/coreimpl/future_implementation.dart |
@@ -169,22 +169,40 @@ class FutureImpl<T> implements Future<T> { |
_complete(); |
} |
- Future transform(Function transformation) { |
+ Future transform(Function transformation, [onException(Object exception)]) { |
final completer = new Completer(); |
- handleException((e) { |
- completer.completeException(e, this.stackTrace); |
+ |
+ transformException(ex, stackTrace) { |
+ var result = false; |
+ if (onException != null) { |
+ try { |
+ result = onException(ex); |
+ } catch (innerException) { |
+ ex = innerException; |
+ } |
+ } |
+ |
+ if (result != true) { |
+ completer.completeException(ex, stackTrace); |
+ } |
+ } |
+ |
+ handleException((ex) { |
+ transformException(ex, this.stackTrace); |
return true; |
}); |
+ |
then((v) { |
var transformed = null; |
try { |
transformed = transformation(v); |
} catch (ex, stackTrace) { |
- completer.completeException(ex, stackTrace); |
+ transformException(ex, stackTrace); |
return; |
} |
completer.complete(transformed); |
}); |
+ |
return completer.future; |
} |