Mur*_*sli 139 javascript observable rxjs typescript
该函数more()应该Observable从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();
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只能做一个请求,如果hasMore()是真的,否则我在subscribe()函数上得到一个错误subscribe is not defined,我怎么能返回一个空的observable?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
Run Code Online (Sandbox Code Playgroud)
在RXJS 6中
import { EMPTY } from 'rxjs'
return EMPTY;
Run Code Online (Sandbox Code Playgroud)
小智 117
对于打字稿,您可以指定空observable的通用参数,如下所示:
import 'rxjs/add/observable/empty'
Observable.empty<Response>();
Run Code Online (Sandbox Code Playgroud)
Ste*_*ier 61
使用新语法,例如rxjs 5.5+,这将变为如下:
// RxJS 6
import { empty, of } from "rxjs";
// rxjs 5.5+ (<6)
import { empty } from "rxjs/observable/empty";
import { of } from "rxjs/observable/of";
empty();
of({});
Run Code Online (Sandbox Code Playgroud)
要记住一件事,empty()完成observable,所以它不会next在你的流中触发,只有完成!因此,如果你有tap他们可能没有按你的意愿触发(见下面的例子).
然后of({})创建一个observable并使用值发出next 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();
Run Code Online (Sandbox Code Playgroud)
Mar*_*ner 39
在我使用Angular2和rxjs的情况下,它适用于:
import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
...
return new EmptyObservable();
...
Run Code Online (Sandbox Code Playgroud)
Sim*_*ver 39
现在有一个EMPTY常数和一个empty功能.
import { Observable, empty, of } from 'rxjs';
var delay = empty().pipe(delay(1000));
var delay2 = EMPTY.pipe(delay(1000));
Run Code Online (Sandbox Code Playgroud)
Observable.empty() 不再存在了.
Mur*_*sli 33
由于所有答案都已过时,我将在这里发布最新答案
在 RXJS >= 6 中
import { EMPTY } from 'rxjs'
return EMPTY;
Run Code Online (Sandbox Code Playgroud)
Toa*_*yen 28
是的,有一个空操作员
Rx.Observable.empty();
Run Code Online (Sandbox Code Playgroud)
对于打字稿,您可以使用from:
Rx.Observable<Response>.from([])
Run Code Online (Sandbox Code Playgroud)
And*_*kyi 17
创建Empty Observable的几种方法:
他们只是不同的你将如何进一步使用它(后它会发出什么样的事件:next,complete或do nothing),例如:
Observable.never() - 不发布任何事件,永不结束.Observable.empty()- 仅发出complete.Observable.of({})- 发出两者next和complete(作为示例传递的空对象文字).根据您的确切需求使用它)
Chy*_*bie 11
例如,您可以返回Observable.of(empty_variable)
Observable.of('');
// or
Observable.of({});
// etc
Run Code Online (Sandbox Code Playgroud)
小智 5
返回空 observable 的不同方式:
https://www.learnrxjs.io/learn-rxjs/operators/creation/empty
| 归档时间: |
|
| 查看次数: |
108486 次 |
| 最近记录: |