我无法从服务中检索错误。 我的组件正在调用服务,我想订阅可能返回的任何错误。但是,我似乎不允许订阅调用方法。
public getMethods(v) {
if(v != null) {
return this._http.get('http:localhost/testservice', {
method: 'GET',
headers: new Headers([
'Accept', 'application/json',
'Content-Type', 'application/json'
])
})
.map(res => (res.json()))
.map((method: any) => {
if(method) {
let result: Array<string> = [];
var list = method.List;
list.forEach(v => {
result.push(v);
})
return result;
}
})
.subscribe(data => {
this._dataStore.mn= data;
this._mnObserver.next(this._dataStore.mn);
},
error => {
**// I want to retrieve this error in the 'calling' component**
return error;
});
}
else {
console.error("Get names. V was null");
}
在组件中: 这不起作用:
this._mnService.getMethods(v), error => {
alert("error in da house");
};
这不起作用:
this._mnService.getMethods(v).subscribe( error => {
alert("error in da house");
});
那么,有什么用呢? 谢谢! :)
答案 0 :(得分:1)
你需要重构一下你的方法:
public getMethods(v) {
if(v != null) {
return this._http.get('http:localhost/testservice', {
method: 'GET',
headers: new Headers([
'Accept', 'application/json',
'Content-Type', 'application/json'
])
})
.map(res => (res.json()))
.map((method: any) => {
if(method) {
let result: Array<string> = [];
var list = method.List;
list.forEach(v => {
result.push(v);
})
return result;
}
});
} else {
console.error("Get names. V was null");
}
}
这样,您在订阅observable时会收到错误:
this._mnService.getMethods(v).subscribe((data) => {
}, error => {
alert("error in da house");
});
您的代码中有点奇怪的是您使用getMethods
方法订阅。因此,除了订阅之外,您不会为请求返回一个observable。
如果您想在响应时触发_mnObserver
,则可以改为使用do
运算符。这是一个示例:
public getMethods(v) {
if(v != null) {
return this._http.get('http:localhost/testservice', {
method: 'GET',
headers: new Headers([
'Accept', 'application/json',
'Content-Type', 'application/json'
])
})
.map(res => (res.json()))
.map((method: any) => {
if(method) {
let result: Array<string> = [];
var list = method.List;
list.forEach(v => {
result.push(v);
})
return result;
}
})
.do(data => { // <-------
this._dataStore.mn= data;
this._mnObserver.next(this._dataStore.mn);
});
} else {
console.error("Get names. V was null");
}
}