[英]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 运算符filter
和map
来完成您的要求并直接从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.