以下代码会导致浏览器停止响应,使用类似' 100'例如,重复解决问题,但在我的情况下,我没有具体的价值。 您能否提出解决方案:
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);
答案 0 :(得分:1)
浏览器冻结,因为.repeat
只是无限期地产生10
。
由于Rx是基于推送的,我们无法知道zip
何时需要另一个项目。相反,我们只需将新值推送到zip
即可。静态(类方法?)repeat
说"嘿,我有新项目现在总是在这里他们是"永远不会放弃控制流回拉链。这意味着zip实际上永远不会订阅interval
observable,因此zip只会无限期地开始缓冲。
如果你来自功能背景,那么它似乎是一个无限的" " 10" s的列表将与任何有限的列表很好地压缩。这是绝对正确的,假设你的无限列表是懒惰的。在这种情况下,我们的"列表"有自己的想法,绝对不是懒惰。
我很乐意提出一个解决方案,但似乎这个例子是人为的。你到底想要做什么?
答案 1 :(得分:0)
我正在处理同样的问题。看起来像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);