订阅可观察对象(作为主题)

subscribe observable (as subject)

我有以下示例代码,其中 returns id+1 个元素:

实体服务:

  public create(model: Model): Observable<number> {
        var subject = new Subject<number>();
        this.GetAll().subscribe(result => {
            if (result.find(x => x.name == model.name)) {
                return;
            }
            model.id = result[result.length - 1].id + 1;
            EntitiesService.mock.push(model);
            subject.next(model.id);
        })
        return subject.asObservable();
    }

我想订阅它以获取最后一个 ID:

分量:

 createMealType(type: string) {
    return this.EntitiesService.create({
      name: type
    }).subscribe((id) => {
      console.log(id);
    })}

但它永远不会进入 console.log 而我在调试时也不会 console.log

仅获取(模拟)的所有返回值

  public GetAll(): Observable<Model[]> {

        return of(EntitiesService.mock);
    }

我该如何处理?

我认为这里不需要 Subject。您可以使用 RxJS 运算符 filter and map 来完成您的要求,并 return 直接从 create() 函数中观察到。

我还用 Array#some 函数替换了 Array#find

import { filter, map } from 'rxjs/operators';

public create(model: Model): Observable<number> {
  return this.GetAll().pipe(
    filter((result: any) => result.some(x => x.name != model.name)),
    map((result: any) => {
      model.id = result[result.length - 1].id + 1;
      EntitiesService.mock.push(model);
      return model.id;
    })
  );
}