函数more()
应该从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
上收到错误,如何返回空的observable?
this.collection.more().subscribe(
(res) =>{
console.log(res);
},
(err) =>{
console.log(err);
}
)
在RXJS 6中
import { EMPTY } from 'rxjs'
return EMPTY;
答案 0 :(得分:102)
对于打字稿,您可以指定空observable的通用参数,如下所示:
import 'rxjs/add/observable/empty'
Observable.empty<Response>();
答案 1 :(得分:44)
使用新语法,例如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({});
要记住一件事,empty()
完成了observable,因此它不会在您的信息流中触发next
,只会完成!因此,如果你有tap
,他们可能没有按你的意愿获得触发器(参见下面的例子)。
而of({})
创建一个observable,然后使用值{}
发出,然后完成observable。
e.g。
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();
答案 2 :(得分:34)
在我使用Angular2和rxjs的情况下,它适用于:
Consumer
答案 3 :(得分:28)
答案 4 :(得分:28)
现在有一个EMPTY
常量和一个empty
函数。
import { Observable, empty, of } from 'rxjs';
var delay = empty().pipe(delay(1000));
var delay2 = EMPTY.pipe(delay(1000));
Observable.empty()
不再存在。
答案 5 :(得分:13)
创建“空可观察”的几种方法:
它们只是在您进一步使用它的方式上有所不同(它将在next
,complete
或do nothing
之后发出什么事件),例如:
Observable.never()
-不发出任何事件,并且永远不会结束。Observable.empty()
-仅发出 complete
。Observable.of({})
-发出 next
和 complete
(空对象文字作为例如)。根据您的实际需求使用它)
答案 6 :(得分:9)
您可以返回Observable.of(empty_variable),例如
Observable.of('');
// or
Observable.of({});
// etc
答案 7 :(得分:2)
或者您也可以尝试package main
import (
"fmt"
"runtime"
)
func foo() {
pc, _, _, ok := runtime.Caller(1)
details := runtime.FuncForPC(pc)
if ok && details != nil {
fmt.Printf("called from %s\n", details.Name())
}
}
func main() {
foo()
}
答案 8 :(得分:0)
试试这个
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();
答案 9 :(得分:0)
RxJS 6
您也可以使用以下功能:
return from<string>([""]);
导入后:
import {from} from 'rxjs';
答案 10 :(得分:0)
在这里遇到类似的问题,上面的内容在"rxjs": "^6.0.0"
中对我不起作用,为了生成一个可观察的对象,该对象不发出我需要做的数据:
import {Observable,empty} from 'rxjs';
class ActivatedRouteStub {
params: Observable<any> = empty();
}