对于下面的函数,我怎么能从'BROKEN'中抛出一个错误,就像它的订阅者可以像'WORKS'代码行一样很好地处理它?
我所看到的是'Works'行整齐地传递了该函数的订阅者的错误,而BROKEN行只是在没有被其订阅者处理的情况下爆炸 . 我在Ionic项目中使用Angular(版本5.0.3),RXJS版本5.5.2和@ angular / common / http中的HttpClient .
public makeRequest(requestParameters) {
return Observable.create(observer => {
let url = 'http://example.com/service/action?a=b';
this.http.get(url,{withCredentials: true})
.subscribe(data => {
if(data["success"] !== true)
observer.error("Unexpected result");//BROKEN
else
observer.next(data["payload"]);
},
err => {
console.log('error: ' + err);
observer.error(err);//WORKS
});
});
}
以下是调用上述函数的函数示例:
public getStuffFromServer(){
this.makeRequest({parameters go here}).subscribe(
data => {
//do something with the results
},
err => {
//This never gets called from the 'BROKEN' code (but it does from the WORKS code
}
);
}
谢谢你的帮助!
3 回答
所以问题似乎在于:
此时的订阅没有遇到错误,实际上订阅已返回数据 .
尝试:
或类似的东西 .
好的,看起来我在这个页面上找到了答案:https://codingblast.com/rxjs-error-handling/
关键是使用 map 和 catch 函数,如下所示:
希望这会对某人有所帮助 . 谢谢大家的回答或者给予了一些思考!
这是一个完整的工作示例,如何获得设备和浏览器的互联网连接 . 使用Angular 7和RxJ 6.3.3:
服务:
无论你需要检查只需导入服务,使用如下: