Timeout rxjs创建的可观察超时总是错误

Timeout rxjs创建的可观察超时总是错误,timeout,rxjs,rxjs5,Timeout,Rxjs,Rxjs5,好吧,现在我真的很困惑。执行以下代码 const created = Rx.Observable.create(observer => { observer.next(42) }) const ofd = Rx.Observable.of(42) const createSub = name => [ val => console.log(`${name} received ${val}`), error => console.log(`${name} th

好吧,现在我真的很困惑。执行以下代码

const created = Rx.Observable.create(observer => {
  observer.next(42)
})
const ofd = Rx.Observable.of(42)

const createSub = name => [
  val => console.log(`${name} received ${val}`),
  error => console.log(`${name} threw ${error.constructor.name}`)
]

created
  .timeout(100)
  .subscribe(
    ...createSub('created')
  )

ofd
  .timeout(100)
  .subscribe(
    ...createSub('ofd')
  )
印刷品

"created received 42"
"ofd received 42"
"created threw TimeoutError"
我完全不理解这一点,为什么
创建了
可观察错误,即使它发出一个值,但
ofd
可观察却没有

使用RxJS 5时,jsbin.com中的5.0.3和我的应用程序中的5.4.3会出现问题


(注意:这也发生在受试者身上,这让我创建了这个示例)

可观察。of
在值发出后立即完成流

Observable.create
打开可观察对象。这就是
超时
抛出错误的原因

替换

const created = Rx.Observable.create(observer => {
  observer.next(42)
})


并且不再有错误。

您可以共享jsbin代码吗?这和上面的代码是一样的,但实际上是有意义的。。。但这并不是超时文档所说的:如果发出了任何值,就不应该抛出错误,或者我读错了吗?“超时操作符允许您中止一个可观察对象,如果该可观察对象在指定的时间跨度内没有发出任何项,则终止一个错误”,您发出一个值,然后出现超时。我猜这是正常的行为必须读两次,所以它会出错,因为在第一个值之后超时发生。。。嗯,我想我们要做的就是确保可观测的完成。没有“第一次发射超时”吗?@DanielPotensky我一直在考虑“第一次发射超时”的问题,但是你能提出另一个问题并在这里告诉我吗?这和最初的问题并没有关系,是吗?完整答案都准备好了:)
const created = Rx.Observable.create(observer => {
  observer.next(42);
  observer.complete();
})