Return 一个空的 Observable
Return an empty Observable
函数 more()
应该 return 来自 get 请求的 Observable
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()
为真时发出请求,否则我会在 subscribe()
函数 subscribe is not defined
上收到错误,我如何才能 return空 Observable?
this.collection.more().subscribe(
(res) => {
console.log(res);
}, (err) => {
console.log(err);
}
);
是的,有一个 Empty 运算符
Rx.Observable.empty();
打字稿可以使用from
:
Rx.Observable<Response>.from([])
你可以returnObservable.of(empty_variable),例如
Observable.of('');
// or
Observable.of({});
// etc
试试这个
export class Collection{
public more (): Observable<Response> {
if (this.hasMore()) {
return this.fetch();
}
else{
return this.returnEmpty();
}
}
public returnEmpty(): any {
let subscription = source.subscribe(
function (x) {
console.log('Next: %s', x);
},
function (err) {
console.log('Error: %s', err);
},
function () {
console.log('Completed');
});
}
}
let source = Observable.empty();
或者你也可以试试ignoreElements()
对于打字稿,您可以像这样指定空可观察对象的通用参数:
import 'rxjs/add/observable/empty'
Observable.empty<Response>();
在我使用 Angular2 和 rxjs 的情况下,它适用于:
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
...
return new EmptyObservable();
...
使用 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
,而只会完成。因此,例如,如果您有 tap
,它们可能不会如您所愿地触发(参见下面的示例)。
而 of({})
创建一个 Observable
并发出下一个值为 {}
的值,然后它完成 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();
RxJS6(未安装兼容包)
现在有一个 EMPTY
常量和一个 empty
函数。
import { Observable, empty, EMPTY, of } from 'rxjs';
//This is now deprecated
var delay = empty().pipe(delay(1000));
var delay2 = EMPTY.pipe(delay(1000));
Observable.empty()
不存在了。
RxJS 6
您也可以使用如下函数:
return from<string>([""]);
导入后:
import {from} from 'rxjs';
创建 Empty Observable 的几种方法:
它们只是在您将如何进一步使用它方面有所不同(它将在之后发出什么事件:next
、complete
或 do nothing
)例如:
Observable.never()
- 不发出任何事件并且永不结束。
Observable.empty()
- 仅发出 complete
.
Observable.of({})
- 同时发出 next
和 complete
(作为示例传递的空对象文字)。
根据您的具体需要使用它)
带着类似的问题来到这里,以上对我不起作用:"rxjs": "^6.0.0"
,为了生成一个不发出数据的可观察对象,我需要做的是:
import {Observable,empty} from 'rxjs';
class ActivatedRouteStub {
params: Observable<any> = empty();
}
您可以 return 空的可观察对象有各种不同的方式,但挑战是 return 它具有预期的类型 -
这是创建类型为 -
的空可观察对象的方法
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(this.setHeaders(req))
.pipe(
catchError((error: HttpErrorResponse) => {
// you write your logic and return empty response if required
return new Observable<HttpEvent<any>>();
}));
}
由于所有答案都已过时,我将post此处提供最新答案
在 RXJS >= 6
import { EMPTY } from 'rxjs'
return EMPTY;
return 空可观察对象的不同方法:
- Observable.from({});
- Observable.of({});
- 空
https://www.learnrxjs.io/learn-rxjs/operators/creation/empty
函数 more()
应该 return 来自 get 请求的 Observable
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()
为真时发出请求,否则我会在 subscribe()
函数 subscribe is not defined
上收到错误,我如何才能 return空 Observable?
this.collection.more().subscribe(
(res) => {
console.log(res);
}, (err) => {
console.log(err);
}
);
是的,有一个 Empty 运算符
Rx.Observable.empty();
打字稿可以使用from
:
Rx.Observable<Response>.from([])
你可以returnObservable.of(empty_variable),例如
Observable.of('');
// or
Observable.of({});
// etc
试试这个
export class Collection{
public more (): Observable<Response> {
if (this.hasMore()) {
return this.fetch();
}
else{
return this.returnEmpty();
}
}
public returnEmpty(): any {
let subscription = source.subscribe(
function (x) {
console.log('Next: %s', x);
},
function (err) {
console.log('Error: %s', err);
},
function () {
console.log('Completed');
});
}
}
let source = Observable.empty();
或者你也可以试试ignoreElements()
对于打字稿,您可以像这样指定空可观察对象的通用参数:
import 'rxjs/add/observable/empty'
Observable.empty<Response>();
在我使用 Angular2 和 rxjs 的情况下,它适用于:
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
...
return new EmptyObservable();
...
使用 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
,而只会完成。因此,例如,如果您有 tap
,它们可能不会如您所愿地触发(参见下面的示例)。
而 of({})
创建一个 Observable
并发出下一个值为 {}
的值,然后它完成 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();
RxJS6(未安装兼容包)
现在有一个 EMPTY
常量和一个 empty
函数。
import { Observable, empty, EMPTY, of } from 'rxjs';
//This is now deprecated
var delay = empty().pipe(delay(1000));
var delay2 = EMPTY.pipe(delay(1000));
Observable.empty()
不存在了。
RxJS 6
您也可以使用如下函数:
return from<string>([""]);
导入后:
import {from} from 'rxjs';
创建 Empty Observable 的几种方法:
它们只是在您将如何进一步使用它方面有所不同(它将在之后发出什么事件:next
、complete
或 do nothing
)例如:
Observable.never()
- 不发出任何事件并且永不结束。Observable.empty()
- 仅发出complete
.Observable.of({})
- 同时发出next
和complete
(作为示例传递的空对象文字)。
根据您的具体需要使用它)
带着类似的问题来到这里,以上对我不起作用:"rxjs": "^6.0.0"
,为了生成一个不发出数据的可观察对象,我需要做的是:
import {Observable,empty} from 'rxjs';
class ActivatedRouteStub {
params: Observable<any> = empty();
}
您可以 return 空的可观察对象有各种不同的方式,但挑战是 return 它具有预期的类型 - 这是创建类型为 -
的空可观察对象的方法intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(this.setHeaders(req))
.pipe(
catchError((error: HttpErrorResponse) => {
// you write your logic and return empty response if required
return new Observable<HttpEvent<any>>();
}));
}
由于所有答案都已过时,我将post此处提供最新答案
在 RXJS >= 6
import { EMPTY } from 'rxjs'
return EMPTY;
return 空可观察对象的不同方法:
- Observable.from({});
- Observable.of({});
- 空
https://www.learnrxjs.io/learn-rxjs/operators/creation/empty