KingNET.WebUI/Scripts/linqjs/bindings/linq.rx.js

(完整代码) 1KB

// binding for RxJS
// ToObservable / ToEnumerable

(function (Enumerable)
{
    Enumerable.prototype.ToObservable = function (scheduler)
    {
        /// <summary>Converts an enumerable sequence to an observable sequence.</summary>
        /// <param type="Optional:Rx.Scheduler" name="scheduler">Rx.Scheduler. Default is CurrentThread.</param>
        var source = this;
        if (scheduler == null) scheduler = Rx.Scheduler.CurrentThread;

        return Rx.Observable.CreateWithDisposable(function (observer)
        {
            var disposable = new Rx.BooleanDisposable();
            var enumerator = source.GetEnumerator();

            scheduler.ScheduleRecursive(function (self)
            {
                try
                {
                    if (!disposable.GetIsDisposed() && enumerator.MoveNext())
                    {
                        observer.OnNext(enumerator.Current());
                        self();
                    }
                    else
                    {
                        enumerator.Dispose();
                        observer.OnCompleted();
                    }
                }
                catch (e)
                {
                    enumerator.Dispose();
                    observer.OnError(e);
                }
            });

            return disposable;
        });
    }


    Rx.Observable.prototype.ToEnumerable = function ()
    {
        /// <summary>Converts an observable sequence to an enumerable sequence. Notice:cold observable only</summary>
        var obs = this;
        return Enumerable.Empty()
            .Let(function ()
            {
                var array = [];
                obs.Subscribe(function (x) { array.push(x) }).Dispose();
                return array;
            });
    }
})(this.Enumerable || this.jQuery.Enumerable);

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。