получить возвращаемое значение функции внутри Array <any>.map Function - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь отобразить массив из выборки данных из базы данных, и внутри значения у меня есть поле с ссылкой на ведро amazon s3, содержащее фотографию пользователя, и я хочу, чтобы эта ссылка была преобразована в dataurl. Поэтому я пишу несколько кодов для преобразования этой ссылки в dataURL. но в то время как я вызываю функцию для преобразования этого конкретного значения в dataurl, я получаю нулевые или неопределенные данные или подписчика взамен не значения. я запутался с моим кодом, поэтому, пожалуйста, помогите мне проверить мои коды и выяснить любую ошибку в нем и выручить меня.

// поле "photoperson", где я хочу вернуть dataurl и getImage функция для конвертации amazonurl в dataURL.

      if(this.searchForm.valid)
  {
    //document.getElementById("surveyinformationsheet").style.display = "block";
    this.apiService.getSuerveyInformationSheet(this.searchForm.value.province_id,this.searchForm.value.muncipality_id,this.searchForm.value.nahia_id,this.searchForm.value.gozar_id)
    .subscribe( data => {
      this.tabledata= data['data'];
      this.tabledataforpage=[];
      this.showdiv=(this.tabledata.length>0)?true:false;
      this.tabledata.map((item, index) => {
        return {
          dataid:item._id,
          id : index,
          name: item["owner_or_first_partner_info"].name,
          fathername : item["owner_or_first_partner_info"].father_name,
          grandfathername: item["owner_or_first_partner_info"].grandfather_name,
          blockid: item["property_physical_location"].block_id,
          parcelno: item["property_physical_location"].parcel_no,
          unitcode: item["property_physical_location"].unit_no,
          parcelarea : item["property_physical_location"].parcel_area,
          photoperson: this.getImage('https://ctu-member-photo.s3.eu-west-2.amazonaws.com/Alka%20%285%29.jpg'+'?'+Math.random())
        }
    }).forEach(item =>  this.tabledataforpage.push(item));
    console.log(this.tabledataforpage);
    });

  }

    getImage(url:string) {
  this.getBase64ImageFromURL(url).subscribe((data: string) => {

  });
}
getBase64ImageFromURL(url: string) {
  return Observable.create((observer: Observer<string>) => {
    let img = new Image();
    img.crossOrigin = 'Anonymous';
    img.src = url;
    if (!img.complete) {
      img.onload = () => {
        observer.next(this.getBase64Image(img));
        observer.complete();
      };
      img.onerror = (err) => {
        observer.error(err);
      };
    } else {
      observer.next(this.getBase64Image(img));
      observer.complete();
    }
  });
}
getBase64Image(img: HTMLImageElement) {
  this.canvas = document.createElement("canvas");
  this.canvas.width = img.width;
  this.canvas.height = img.height;
  var ctx = this.canvas.getContext("2d");   
  ctx.drawImage(img, 0, 0);
  var dataURL = this.canvas.toDataURL("image/jpg");    
  return this.base64DefaultURL = dataURL;
}
...