gpt4 book ai didi

angular - rxjs Observable .map 未执行

转载 作者:太空狗 更新时间:2023-10-29 18:06:03 25 4
gpt4 key购买 nike

我有以下返回可观察对象的代码,它检查 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 /订阅部分我有以下内容:

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 函数中的 console.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 ...)

关于angular - rxjs Observable .map 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40357753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com