Index: chrome/common/extensions/docs/server2/future.py |
diff --git a/chrome/common/extensions/docs/server2/future.py b/chrome/common/extensions/docs/server2/future.py |
index 4b09073d4c25c0812fcbb9494dd731333f4cedf9..51c284235cc7706d4f9c9df0f2740cdf18d409b0 100644 |
--- a/chrome/common/extensions/docs/server2/future.py |
+++ b/chrome/common/extensions/docs/server2/future.py |
@@ -7,6 +7,10 @@ import sys |
_no_value = object() |
+def _DefaultErrorHandler(error): |
+ raise error |
+ |
+ |
def All(futures, except_pass=None): |
'''Creates a Future which returns a list of results from each Future in |
|futures|. |
@@ -61,12 +65,17 @@ class Future(object): |
self._exc_info is None): |
raise ValueError('Must have either a value, error, or callback.') |
- def Then(self, callback): |
+ def Then(self, callback, error_handler=_DefaultErrorHandler): |
'''Creates and returns a future that runs |callback| on the value of this |
- future. |
+ future, or runs optional |error_handler| if resolving this future results in |
+ an exception. |
''' |
def then(): |
- return callback(self.Get()) |
+ try: |
+ val = self.Get() |
+ except Exception as e: |
+ return error_handler(e) |
+ return callback(val) |
return Future(callback=then) |
def Get(self): |