Rxjs 在流上增加延迟?
我有以下几点,它确实有效,它不断增加延迟,最终超时,这正是我想要的 但是因为我使用的是Concatmap,所以我丢失了间隔中的原始值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)
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延迟?