Rxjs 在流上增加延迟?

Rxjs 在流上增加延迟?,rxjs,observable,rxjs6,Rxjs,Observable,Rxjs6,我有以下几点,它确实有效,它不断增加延迟,最终超时,这正是我想要的 但是因为我使用的是Concatmap,所以我丢失了间隔中的原始值 let x = 1 let source2$ = interval(500) .pipe( concatMap(() => { x++ let newtime = x * 500 console.log("newtime ", newtime)

我有以下几点,它确实有效,它不断增加延迟,最终超时,这正是我想要的

但是因为我使用的是Concatmap,所以我丢失了间隔中的原始值

   let x = 1
    let source2$ = interval(500)
      .pipe(

        concatMap(() => {
          x++
          let newtime = x * 500
          console.log("newtime ", newtime)
          return of(5).pipe(delay(newtime))
        }),
        timeout(3000),
        map((data) => {
          return 'Source 2: ' + data
        })
      )
所以它打印了来源2:5。。其中,我希望它打印间隔的值

   let x = 1
    let source2$ = interval(500)
      .pipe(

        concatMap(() => {
          x++
          let newtime = x * 500
          console.log("newtime ", newtime)
          return of(5).pipe(delay(newtime))
        }),
        timeout(3000),
        map((data) => {
          return 'Source 2: ' + data
        })
      )
我用concatmap得到了我想要的结果,但我认为这是错误的运算符,因为我丢失了原始值

有人能帮忙吗

更多信息

总而言之,我想做的就是使用时间间隔发出值,每次发出后增加延迟时间-最终它会超时3000毫秒并出错

const source2$ = interval(500)
      .pipe(
        map(x => x * 500),
        switchMap(x => timer(x)),
        timeout(3000),
        map(data =>  'Source 2: ' + data)
       )
更新:


我在评论中提到,您可以使用
concatMap
来实现这一点,它从
interval
接收不断增加的索引:

concatMap(index => {
  let newtime = index * 500
  console.log("newtime ", newtime)
  return of(index).pipe(delay(newtime))
}),
请注意,我正在通过(index)的
将值返回到流


我想我理解你为什么担心返回另一个可观察到的。由于您希望按顺序发射项目(仅在前一个项目完成后发射一个项目),因此必须对另一个内部可观测对象使用
concatMap
。此功能没有专门的运算符,因为这是“可组合行为”,这意味着您可以通过组合现有运算符来实现此行为。

concatMap
接收触发其投影函数的值,如
concatMap(value=>{})
所以你以后可以
赋值
如果你问的是这个问题的话是的,我想那会管用的。是否有其他类型的操作符允许我运行延迟,但不返回另一个可观察的。我想我有点搞错了,但我不能停止感觉我做错了我想我不明白你想做什么我更新了信息,总结了我想做的事情这似乎不起作用。它立即超时。而且switchmap不会改变可观察的对象,所以我会丢失value@MarkSmith,我误解了你原来的问题。检查更新的版本是否适合您。如何在不使用interval的情况下增量增加RxJS延迟?是的,确实有效。这就是我所想的,有一种替代的方式做事情。现在你解释了,看起来好多了,谢谢@martin您将如何在不使用interval的情况下增量增加RxJS延迟?