Rxjs 使用zip重复Rx.Observable.repeat(无限期)会导致浏览器停止响应
下面的代码会导致浏览器停止响应,例如,在repeat中使用“100”这样的值可以解决问题,但在我的例子中,我没有它的特定值。 请您提出解决方案:Rxjs 使用zip重复Rx.Observable.repeat(无限期)会导致浏览器停止响应,rxjs,Rxjs,下面的代码会导致浏览器停止响应,例如,在repeat中使用“100”这样的值可以解决问题,但在我的例子中,我没有它的特定值。 请您提出解决方案: var observer = Rx.Observer.create(function (x) { console.log(x); },
var observer = Rx.Observer.create(function (x)
{
console.log(x);
},
function (err)
{
console.log('Error: ' + err);
},
function ()
{
console.log('Completed');
});
var repeat = Rx.Observable.repeat(10, null); //repeat indefinitely
var interval = Rx.Observable.interval(1000);
var zip = Rx.Observable.zip(repeat,
interval,
function(rep, inter)
{
return rep + inter;
});
zip.subscribe(observer);
由于
.repeat
只会无限期地产生10
,因此浏览器会冻结
由于Rx是基于推送的,我们无法知道何时zip
需要其他物品。相反,我们只要在可用时将新值推送到zip
。静态(类方法?repeat
表示“嘿,我现在有新项目,它们总是在这里”,并且从不放弃控制流回到zip。这意味着zip永远不会真正订阅可观察的间隔,所以zip只是无限期地开始缓冲
如果你来自一个功能性的背景,那么它看起来就像是一个“无限”的“10”列表,可以很好地与一个有限的任何东西列表相匹配。这是绝对正确的,假设你的无限列表是懒惰的。在这种情况下,我们的“列表”有自己的想法,绝对不是懒惰
我很乐意提出一个解决方案,但这个例子似乎是人为的。你到底想做什么?我正在处理同样的问题。看来delay
可以做到这一点
下面是您的代码稍微修改过的版本:
var observer = Rx.Observer.create(function (x)
{
console.log(x);
},
function (err)
{
console.log('Error: ' + err);
},
function ()
{
console.log('Completed');
});
var repeat = Rx.Observable.of(10).delay(0).repeat(-1); //repeat indefinitely
var interval = Rx.Observable.interval(1000);
var zip = Rx.Observable.zip(repeat,
interval,
function(rep, inter)
{
return rep + inter;
});
zip.subscribe(observer);
我在这里发布了一个可能对读者有帮助的相关问题:。你介意看一下吗?