订阅可观察对象(作为主题)
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;
})
);
}
我有以下示例代码,其中 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;
})
);
}