diff --git a/Implab/IPromise.cs b/Implab/IPromise.cs --- a/Implab/IPromise.cs +++ b/Implab/IPromise.cs @@ -17,20 +17,55 @@ namespace Implab { /// Type PromiseType { get; } + /// + /// Обещание является выполненым, либо успешно, либо с ошибкой. + /// bool IsResolved { get; } + /// + /// Обещание было отменено. + /// bool IsCancelled { get; } IPromise Then(Action success,ErrorHandler error); IPromise Then(Action success); IPromise Error(ErrorHandler error); + /// + /// Обрабатывает либо ошибку, либо результат. Событие отмены не обрабатывается. + /// + /// Обработчик. + /// После обработке ошибки, она передается дальше. IPromise Anyway(Action handler); + + /// + /// Обрабатывает либо ошибку, либо результат, либо отмену обещания. + /// + /// Обработчик. + /// После обработке ошибки, она передается дальше. IPromise Finally(Action handler); + /// + /// Обработчик для регистрации отмены обещания, событие отмены не может быть подавлено. + /// + /// Новое обещание, связанное с текущим. + /// Обработчик события. + /// Если обработчик вызывает исключение, то оно передается обработчику ошибки, результат работы + /// которого будет передан связанному обещанию IPromise Cancelled(Action handler); + /// + /// Преобразует результат обещания к заданному типу и возвращает новое обещание. + /// IPromise Cast(); + /// + /// Синхронизирует текущий поток с обещанием. + /// void Join(); + /// + /// Синхронизирует текущий поток с обещанием. + /// + /// Время ожидания, по его истечению возникнет исключение. + /// Превышено время ожидания. void Join(int timeout); } diff --git a/Implab/Promise.cs b/Implab/Promise.cs --- a/Implab/Promise.cs +++ b/Implab/Promise.cs @@ -447,8 +447,9 @@ namespace Implab { } public IPromise Cancelled(Action handler) { - AddHandler(null, null, handler, null); - return this; + var medium = new Promise(this, true); + AddHandler(null, null, handler, medium); + return medium; } ///