Angular 2如果在
中有订阅,如何从地图返回getImage(imageId: string): Observable<ImageSource> {
return this.http.get(`${ImagesUrl}/${imageId}`, {
responseType: 'blob', observe: 'response' }).map((response) => {
// here I am converting blob to base64
let blob = response; // lets say response is blob
let reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = (e) => {
// how can I return from here?????
};
}
}
有没有办法只在onloadend事件后从地图返回?
提前致谢
答案 0 :(得分:3)
我不知道FileReader类,但您可以尝试链接所有必须做的事情(利用流)。
function getImage(imageId: string): Observable<ImageSource> {
return this.http.get(`${ImagesUrl}/${imageId}`, {responseType: 'blob', observe: 'response'})
.switchMap((response) => {
const blob = response;
const reader = new FileReader();
reader.readAsDataURL(blob);
return Observable.fromPromise(new Promise((resolve, reject) => {
reader.onloadend = resolve;
}));
});
}
reader.onloadend = resolve;
是
reader.onloadend = (e) => { resolve(e); }
在流的结尾处,您将获得由onloadend
发布的活动。如果您还需要其他任何内容,只需传递另一个参数即可解决。
当出现reject
失败的情况时,您还应该处理案例。