Index: lib/coreimpl/future_implementation.dart |
diff --git a/lib/coreimpl/future_implementation.dart b/lib/coreimpl/future_implementation.dart |
index 328c88964c6be89f44914b7bdddb32a12102758e..0272fb68fc47e447db303218b8c0a5cfa0e623ea 100644 |
--- a/lib/coreimpl/future_implementation.dart |
+++ b/lib/coreimpl/future_implementation.dart |
@@ -171,20 +171,23 @@ class FutureImpl<T> implements Future<T> { |
Future transform(Function transformation) { |
final completer = new Completer(); |
+ |
handleException((e) { |
- completer.completeException(e, this.stackTrace); |
+ completer.completeException(e, stackTrace); |
return true; |
}); |
+ |
then((v) { |
var transformed = null; |
try { |
transformed = transformation(v); |
- } catch (ex, stackTrace) { |
- completer.completeException(ex, stackTrace); |
+ } catch (e, stackTrace) { |
+ completer.completeException(e, stackTrace); |
return; |
} |
completer.complete(transformed); |
}); |
+ |
return completer.future; |
} |
@@ -210,6 +213,23 @@ class FutureImpl<T> implements Future<T> { |
}); |
return completer.future; |
} |
+ |
+ Future transformException(transformation(Object exception)) { |
+ final completer = new Completer(); |
+ |
+ handleException((ex) { |
+ try { |
+ completer.complete(transformation(ex)); |
+ } catch (innerException, stackTrace) { |
+ completer.completeException(innerException, stackTrace); |
+ } |
+ return true; |
+ }); |
+ |
+ then(completer.complete); |
+ |
+ return completer.future; |
+ } |
} |
class CompleterImpl<T> implements Completer<T> { |