private Promise<T> _Then(ChainReturnDelegate Chain) { lock(lockObject) { return new Promise<T>((LocalResolve, LocalReject) => { try { _asyncSubject .First() .Where(_ => _isFulfilled) .Delay(TimeSpan.FromMilliseconds(_delay)) .Subscribe(_ => { _payload = Chain(_payload); LocalResolve(_payload); }); _asyncSubject .First() .Where(_ => _isRejected) .Subscribe(_ => { LocalReject(_payload); }); } catch { LocalReject(_payload); } }); } }
private Promise<T> _Catch(ChainReturnDelegate Chain) { lock(lockObject) { return new Promise<T>((LocalResolve, LocalReject) => { try { _asyncSubject .First() .Where(_ => _isRejected) .Subscribe(_ => { _payload = Chain(_payload); LocalResolve(_payload); }); _asyncSubject .First() .Where(_ => _isFulfilled) .Subscribe(_ => { LocalResolve(_payload); }); } catch { LocalReject(_payload); } }); } }
public Promise<T> Then(ChainReturnDelegate Chain) { return _Then(Chain); }
public Promise<T> Catch(ChainReturnDelegate Chain) { return _Catch(Chain); }