我有一个显示问题列表的应用程序。当应用启动时,我想检查是否存储了任何问题,如果没有,则发出请求以从云中获取问题。
我有一个返回POST请求的简单函数:
getQuestions() {
return this.http.post(AppSettings.CI_GET_QUESTIONS, '')
}
如果我订阅此Observable:
this.dataService.getQuestions()
.map(questions => questions.json())
.map((questions) => {
return questions;
})
.subscribe((success) => {
console.log("### sc:", success)
})
到目前为止,我已经打印了一系列问题。
但是,我去检查是否已经将问题存储在本地,如果没有,则从云中获取问题。所以我写了这个Observable来做到这一点:
this.storage.checkQuestionsLocally()
.catch((error) => {
return this.dataService.getQuestions()
.map(questions => questions.json())
.map((questions) => {
return questions;
})
})
.subscribe((done) => {
console.log("### questions done:", done)
}, (error) => {
console.log("### error during getting questions:", error)
}, () => {
console.log("### questions found routine is completed");
})
在启动时,我们检查是否在本地存储了所有内容,如果收到错误,则去获取问题。
我遇到的问题在于此catch
函数。该错误触发catch
,并且代码尝试执行请求,但实际上没有任何反应。我可以在(Chrome开发工具的)“网络”页面上看到我的请求被取消了:
getQuestions (canceled) xhr polyfills.js:3 0 B 15 ms
为什么取消此操作?请求不应该只是引发并带回问题吗?
谢谢, 孟加拉