Angular 2如何从map函数返回

时间:2018-01-31 15:15:05

标签: angular typescript rxjs filereader angular-httpclient

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事件后从地图返回?

提前致谢

1 个答案:

答案 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失败的情况时,您还应该处理案例。