неопределенная ошибка «подписаться» при возвращении наблюдаемойсо службы в Angular 5? - PullRequest
0 голосов
/ 25 октября 2018

Я строю объекты new Azureblob(blob.name для каждого значения, перенастроенного внешней службой, и добавляю его в массив new Azureblob(blob.name.Также можно вернуть это из анонимной функции return localArr.

Вопросы:

  1. Как мы можем вернуть это через метод, который будет использоваться компонентом?
  2. Также нужно сделать это как Observable<Azureblob[], потому что службе требуется время для извлечения данных с сервера?

Модель

export class Azureblob {
  blobName: string;

  constructor(private blobName1: string) {
    this.blobName = blobName1;
  }
}  

Сервис.Это правильно?

 import { Azureblob } from '../models/azureblob';
 ..
 export class BlobService {
   constructor() { }
   blobServiceObj: any;
   blobList: Observable<Azureblob[]> = of([]);

   getAllBlobsJS(): Observable<Azureblob[]> {
     var localArr: Azureblob[] = [];

     this.blobServiceObj = AzureStorageBlobServiceJS.createBlobService(this.connectionString);

     this.blobList = this.blobServiceObj.listBlobsSegmented('acs', null, function (error, results) {
        if (error) {
         console.log("**** Error");
        } else {
          for (var i = 0, blob; blob = results.entries[i]; i++) {
             console.log("Blob ", i, blob); /** SEE BELOW **/
             localArr.push(new Azureblob(blob.name));
           }
        }
         console.log("localArr - # of blobs returned=", localArr.length); /** SEE BELOW **/
        return localArr;
      });

      return this.blobList;
   }

Служба работает нормально и возвращает результат как

 Blob 0 
 BlobResult {name: "Git-Logo-1788C.png", creationTime: "Mon, 17 Sep 2018 17:57:39 GMT", lastModified: "Mon, 17 Sep 2018 17:57:39 GMT", etag: "0x8D61CC70ED10A9F", contentLength: "5684", …}

 localArr - # of blobs returned= 4

Компонент

blobList: Azureblob[] = [];

this.blobService.getAllBlobsJS()
  .subscribe(
    (val) => {
      console.log("..values=", val);
    });

ошибка, которую я вижу enter image description here

1 Ответ

0 голосов
/ 25 октября 2018

getAllBlobsJS должен вернуться как наблюдаемое, чтобы вы могли подписаться на него.

</p>

<code>getAllBlobsJS(): Observable<Azureblob[]> {
return new Observable(obs=>{
  var localArr: Azureblob[] = [];

  this.blobServiceObj = 
   AzureStorageBlobServiceJS.createBlobService(this.connectionString);

  this.blobList = this.blobServiceObj.listBlobsSegmented('acs', null, function 
  (error, results) {
    if (error) {
      console.log("**** Error");
      obs.error();
    } else {
      for (var i = 0, blob; blob = results.entries[i]; i++) {
        console.log("Blob ", i, blob); /** SEE BELOW **/
        localArr.push(new Azureblob(blob.name));
      }
    }
    console.log("localArr - # of blobs returned=", localArr.length); /** SEE BELOW 
  **/
    return localArr;
  });

  obs.next(this.blobList);
  obs.complete();
 })}
</code>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...