你能告诉我为什么这个 ()
成功方法没有触发吗?当我使用 forkjoin()
时,它运行良好。成功方法必须每次都触发,不是吗?希望它像 try-catch
block 上的 final
方法。
注意:请同时查看内联评论。
.ts
getAllBooksReadAndUnRead(id: number, loader?) {
this.article.getAllBooksReadAndUnRead(id)
.map((res: any) => res.json())
.subscribe(res => {
this.setAllData(res); //it comes to here
this.loadingControllerService.dismissLoader(loader);//I have to put this here.Then no problem.But I think it is duplicate of work???
},
error => {this.loadingControllerService.dismissLoader(loader);},
() => {this.loadingControllerService.dismissLoader(loader);}//not fire
});
}
API调用
getAllBooksReadAndUnRead(bookId) {
return this.apiSer.get(`${config.fromThisBook}?page=all&book[]=${bookId}`);
}
通用方法:
get(api) {
return new Observable(observer => {
let header = new Headers();
this.createHeader(header)
.then(() => {
let options = new BaseRequestOptions();
options.withCredentials = true;
options.headers = header;
this.http.get(api, options)
.subscribe(response => {
observer.next(response);
}, (e) => {
observer.error(e);
});
})
})
}
post()
post(url, params): Observable<any> {
return new Observable(observer => {
let header = new Headers();
this.createHeader(header)
.then(() => {
let options = new RequestOptions({ headers: header });
this.http.post(url, params, options)
.subscribe(response => {
observer.next(response);
observer.complete();
}, (e) => {
observer.error(e);
});
})
})
}
最佳答案
问题是您永远不会在自定义生产者中触发完成。你需要这样的东西:
get(api) {
return new Observable(observer => {
let header = new Headers();
this.createHeader(header)
.then(() => {
let options = new BaseRequestOptions();
options.withCredentials = true;
options.headers = header;
this.http.get(api, options).subscribe(
response => observer.next(response),
(e) => observer.error(e),
() => observer.complete(); <-------------------------
);
})
})
}
另外我认为你不需要自定义制作人,试试这样:
get(api) {
return Observable.from(this.createHeader()).map((header) => {
let options = new BaseRequestOptions();
options.withCredentials = true;
options.headers = header;
return this.http.get(api, options);
}).mergeAll();
}
这是它的工作原理:
Observable.from(this.createHeader())
返回一个 observable,一旦 promise 被 resolved 就会传递值.map((header) => {
观察来自返回的 promise 的值并发出 HTTP 请求并以可观察的形式返回结果mergeAll()
- 由于之前的操作返回并可观察,我们需要将其展平
关于javascript - 可观察到的成功方法未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157794/