diff --git a/Implab/IPromise.cs b/Implab/IPromise.cs
--- a/Implab/IPromise.cs
+++ b/Implab/IPromise.cs
@@ -18,7 +18,7 @@ namespace Implab {
Type PromiseType { get; }
///
- /// Обещание является выполненым, либо успешно, либо с ошибкой.
+ /// Обещание является выполненым, либо успешно, либо с ошибкой, либо отменено.
///
bool IsResolved { get; }
diff --git a/Implab/Promise.cs b/Implab/Promise.cs
--- a/Implab/Promise.cs
+++ b/Implab/Promise.cs
@@ -73,9 +73,9 @@ namespace Implab {
var res = errorHandler(err);
if (medium != null)
medium.Resolve(res);
- } catch (TransientPromiseException err2) {
+ /*} catch (TransientPromiseException err2) {
if (medium != null)
- medium.Reject(err2.InnerException);
+ medium.Reject(err2.InnerException);*/
} catch (Exception err2) {
if (medium != null)
medium.Reject(err2);
@@ -203,7 +203,7 @@ namespace Implab {
/// Данное обещание уже выполнено
public void Reject(Exception error) {
if (BeginTransit()) {
- m_error = error;
+ m_error = error is TransientPromiseException ? error.InnerException : error;
CompleteTransit(REJECTED_STATE);
OnStateChanged();
} else {