角度服务中的一个方法返回一个组件订阅的Observable . 但是在那种方法中,还有一个承诺也会被返回,我希望能够在它返回拒绝的情况下捕获它 . 找到下面的代码:
return this.http.get(url)
.map(res => res.json())
.map((data: any) => {
try {
if (data === "14") {
this.nativeService.set(value)
.then(() => {
console.log('ok');
})
.catch((err) => { throw new Error(); //error that I want to catch
})
}
}
catch (err) {
throw new Error();
}
return data;
})
.catch((err) => this.handleError(err));
此nativeService目前已被模拟,返回以下内容
set(value: any): Promise<any> {
return new Promise((resolve, reject) => {
reject('');
})
}
但是会返回数据 . 然后抛出错误,我无法捕获它以调用方法handleError() . 我知道promise是异步调用 . 有人可以建议如何重新安排代码,以捕获服务返回的错误 .
谢谢,阿什利
1 回答
这不是您从observable返回数据的方式 . 你不能在这里使用简单的
return data
语句 . 此外,您已经返回了一个observable,那么您希望这些数据在哪里?对于要返回的数据,您实际上创建了一个新的observable并将观察者放在接收的数据上 .
让我更正您的代码:
现在您订阅的组件将有3个输出 . 1.数据2.承诺错误(
.subscribe
数据中的1和2)和3.http.get()
错误 . 因此你必须在那里管理 .NOTE: 我只解决了上述问题 . 我不确定我不知道的那部分 -
if(data === "14")
- 这里好像你要将它与数字14进行比较而不是字符串"14" .http.get()结果是什么?如果它返回一个数字值,那就没关系 .
this.nativeService.set(data)
- 假设此承诺正确返回所有内容 .