繁体   English   中英

订阅 observable(作为主题)

[英]subscribe observable (as subject)

我有以下示例代码,它返回它的元素的 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 运算符filtermap来完成您的要求并直接从create()函数返回 observable。

我还用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;
    })
  );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM