more()函数应该从get请求返回一个可观察对象
export class Collection {
public more = (): Observable<Response> => {
if (this.hasMore()) {
return this.fetch();
} else {
// return empty observable
}
};
private fetch = (): Observable<Response> => {
return this.http.get("some-url").map((res) => {
return res.json();
});
};
}
在这种情况下,我只能做一个请求,如果hasMore()为真,否则我得到一个错误订阅()函数订阅没有定义,我怎么能返回一个空的可观察对象?
this.collection.more().subscribe(
(res) => {
console.log(res);
}, (err) => {
console.log(err);
}
);
使用RxJS 5.5+的新语法,它变成如下所示:
// RxJS 6
import { EMPTY, empty, of } from "rxjs";
// rxjs 5.5+ (<6)
import { empty } from "rxjs/observable/empty";
import { of } from "rxjs/observable/of";
empty(); // deprecated use EMPTY
EMPTY;
of({});
只有一件事要记住,EMPTY完成了可观察对象,所以它不会在你的流中触发next,而只是完成。所以,如果你有,例如,点击,他们可能不会得到你所希望的触发(见下面的例子)。
而of({})创建了一个Observable,并发出了一个值为{}的next,然后它完成了Observable。
例如:
EMPTY.pipe(
tap(() => console.warn("i will not reach here, as i am complete"))
).subscribe();
of({}).pipe(
tap(() => console.warn("i will reach here and complete"))
).subscribe();
使用RxJS 5.5+的新语法,它变成如下所示:
// RxJS 6
import { EMPTY, empty, of } from "rxjs";
// rxjs 5.5+ (<6)
import { empty } from "rxjs/observable/empty";
import { of } from "rxjs/observable/of";
empty(); // deprecated use EMPTY
EMPTY;
of({});
只有一件事要记住,EMPTY完成了可观察对象,所以它不会在你的流中触发next,而只是完成。所以,如果你有,例如,点击,他们可能不会得到你所希望的触发(见下面的例子)。
而of({})创建了一个Observable,并发出了一个值为{}的next,然后它完成了Observable。
例如:
EMPTY.pipe(
tap(() => console.warn("i will not reach here, as i am complete"))
).subscribe();
of({}).pipe(
tap(() => console.warn("i will reach here and complete"))
).subscribe();