网站搜索

javascript - timeout() 操作符在 pipe Rxjs subject 中不起作用


我在主题中遇到了超时操作符的问题。

我的问题看起来像上面的示例,但我得到了所有的源代码,

响应:可观察的:1 可观察的:2

网址: https://stackblitz.com/edit/ou5yp1?file=index.ts

import { Subject, from,Observable } from 'rxjs';
import {timeout} from 'rxjs/operators';

const subject = new Subject();
 subject.subscribe({
  next: (v) => console.log(`observer: ${v}`),
   error: (e) => console.log(`There is an Error ${e}`)
  });
subject.pipe(timeout(2000));

const observable = new Observable( sub=> {
 sub.next( 1);
 setTimeout(()=> {
 sub.next(2)
 },5000)
})
observable.subscribe(subject); 

答案#1

你订阅了错误的可观察对象。

subject.pipe(timeout(2000));

上述行不适用于主体本身,而是返回一个具有2秒超时的新可观察对象。因此,你应该订阅这个返回的可观察对象,而不是订阅主体本身。因此你的代码应该是:

subject.pipe(timeout(2000)).subscribe({
  next: (v) => console.log(`observer: ${v}`),
  error: (e) => console.log(`There is an Error ${e}`)
});