一个 Observable 如何根据另一个 Observable 发出值

How an Observable emits value according to another Observable

所以,比方说,我有一个 Observable,它是从一个带有时间戳值的巨大有序数组创建的,我还有另一个 Observable,它是从事件创建的(基本上每秒发出四次时间戳)。

问题来了,我如何实现才能让第二个 Observable 发射值,第一个 Observable 发射所有值,直到达到大于第二个 Observable 发射值的值,然后等待第二个 Observable 继续发射

保持简短是一个 Observable 一直发射,直到它大于另一个 Observable 的发射值。

e.g. : 
  Observable A [1,1.1,1.5,1.7,2,5,7]
  Observable B [1,2,3,4,5,6,7,8]
B emit 1 -> A emit 1, wait
B emit 2 -> A emit 1.1 1.5 1.7 2 wait
B emit 3........
B emit 7 -> A emit 7
B emit 8 -> A over

加上:B 是可寻的

e.g. : 
  Observable A [1,1.1,1.5,1.7,2,5,7]
  Observable B [1,2,3,4,5,6,7,8]
B emit 1 -> A emit 1, wait
B emit 2 -> A emit 1.1 1.5 1.7 2 wait
B emit 3........
suddenly B seek to 2
B emit 2 -> A emit the one in A array which closest to 2
then keep moving
B emit 7 -> A emit 7
B emit 8 -> A over

我自己解决了

const time$ = fromEvent(v, 'timeupdate').pipe(map(a => v.currentTime));
let lastIndex = 0,
    lastTime = 0;
const danmaku$ = new Observable(subscriber => {
    time$.subscribe(time => {
        const index = search(data, time);
        if (Math.abs(time - lastTime) > 1) {
            // user drag the progress bar
            subscriber.next(data[index]);
        } else {
            for (let i = lastIndex; i < index; i++) {
                subscriber.next(data[i]);
            }
        }
        lastIndex = index;
        lastTime = time;
    });
});

danmaku$.subscribe(d => {
    console.log(d.time, d.content);
});