我有下面的代码返回一个可观察对象,它检查是否this。data是有效的JSON,否则它会尝试从url获取。取回和所有的工作。
load():Observable<IStandardListOutput[]> {
return Observable.create(observer => {
if (this.needsFetch) {
var data;
this.http.get(this.data)
.map(res => {
var result = res.text();
// console.log(result);
try {
data = JSON.parse(result)
} catch (e) {
return Observable.of([{error:"ERROR LOADING JSON: " + this.data}]);
}
return data;
}).subscribe(res => {
observer.next(this._parse(res));
observer.complete();
});
}else {
observer.next(this._parse(this.data));
observer.complete();
}
});
}
现在,在观察者的map/subscribe部分,我有以下内容:
let observable$ = this.loader.load(); // <-- load method above
observable$.map(res => {
console.warn ("IN MAP: " + JSON.stringify(res));
});
observable$.subscribe(res=> {
console.log("IN SUB: " + JSON.stringify(res));
},
err => {
console.log(JSON.stringify(err))
},
() => {
console.info("COMPLETE")
}
);
我在输出/控制台中看到的只是"in SUB"(订阅)函数和一个"COMPLETE"。控制台。map函数中的Warn永远不会被执行。
任何帮助都是非常感激的,谢谢提前
这个map永远不会被执行,因为它创建了一个保持冷状态的可观察对象(没有订阅)。添加一个空的subscribe()
,它应该工作。
observable$.map(res => {
console.warn ("IN MAP: " + JSON.stringify(res));
}).subscribe();
关于rxjs调试的另一个提示,如果你想窥探值,你可以总是使用do
操作符(而不是map
)。
observable$
.do((v) => console.log('debug point: ', v)) // <-- this is the addition.
.subscribe(...your original handlers go here ...)
rxjs变化很大。Angular 2(8)与AngularJS有很大的不同。
从rxjs版本6开始,你需要用
导入它import {map} from 'rxjs/operators';
,并且在您的代码中,将其包含在pipe
中,例如:
observable.pipe(map(res => res.json()).subscribe( {
console.log("IN SUB: " + JSON.stringify(res)); },
err => {
console.log(JSON.stringify(err))},
() => {
console.info("COMPLETE")
}
希望这对你有帮助!