Javascript rxjs中的动态计时器

Javascript rxjs中的动态计时器,javascript,arrays,rxjs,rxjs5,Javascript,Arrays,Rxjs,Rxjs5,我正在创建一个带有图像和视频的滑块,我想为每种类型分配一定的屏幕时间 let data = [{"path":"http://localhost:8091/public/testimg.jpg","type":"image"},{"path":"http://localhost:8091/public/testvideo.mp4","type":"video"}] Observable.timer(0, 3000) .map(e =>

我正在创建一个带有图像和视频的滑块,我想为每种类型分配一定的屏幕时间

let data =  [{"path":"http://localhost:8091/public/testimg.jpg","type":"image"},{"path":"http://localhost:8091/public/testvideo.mp4","type":"video"}]
Observable.timer(0, 3000)
                            .map(e => { 
                                console.log(e); return data[e % data.length]; 
                            })
                            .subscribe(item => {
                                this.activeItem = item;
                            });
我可以使用上面的代码为所有幻灯片设置一般时间,但无法为数组中的每个项目设置单独的值

这就是我真正想要实现的目标 1) 在数组完成无限迭代后,从0迭代到最后一个索引 2) 能够根据每个对象内的type属性设置下一次迭代发生的时间


现在只有1)是可以满足的。

诀窍是使用concatMap。它将从每个项目中创建一个立即可观察的项目,然后是一个空可观察的延迟。在该延迟之后,可观察对象完成,下一个将被连接。这将使用repeat()操作符无限重复

let data =  [{"path":"http://localhost:8091/public/testimg.jpg","type":"image"},{"path":"http://localhost:8091/public/testvideo.mp4","type":"video"}];

const delayByMediaType = {image: 1000, video: 5000};

Observable.from(data)
    .concatMap(media => 
        Observable.of(media).concat(Observable.empty().delay(delayByMediaType[media.type]))
    )
    .repeat()
    .do(console.log)
    .subscribe(item => this.activeItem = item);

谢谢,在gitter页面的帮助下,我采用了类似的方法。
let data =  [{"path":"http://localhost:8091/public/testimg.jpg","type":"image"},{ "path":"http://localhost:8091/public/testvideo.mp4","type":"video"}];

const delayByMediaType = {image: 1000, video: 5000};

Observable.from(data)
.concatMap(media => {
   return Observable.of(media).delay(delayByMediaType[media.type])
}).subscribe(console.log);