简体   繁体   English

返回Observable时出现“订阅”未定义错误 <Object[]> 从Angular 5中的服务退出?

[英]'subscribe' undefined error when returning Observable<Object[]> from service in Angular 5?

I'm building objects new Azureblob(blob.name for each value retuned by external service and adding it to an Array new Azureblob(blob.name . Also able to return this from anonymous function return localArr . 我正在为由外部服务重新调整的每个值构建对象new Azureblob(blob.name ,并将其添加到Array new Azureblob(blob.name 。也可以从匿名函数return localArr返回此return localArr

Questions: 问题:

  1. How can we return this through the method for it to be used by the component? 我们如何通过方法将其返回给组件使用?
  2. Also need to make it as Observable<Azureblob[] because the service takes a while to fetch the data from the server? 还需要将其设置为Observable<Azureblob[]因为该服务需要一段时间才能从服务器获取数据?

Model 模型

export class Azureblob {
  blobName: string;

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

Service. 服务。 Is this correct? 这个对吗?

 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;
   }

The service works fine and returns result as 该服务工作正常,并返回结果为

 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

Component 零件

blobList: Azureblob[] = [];

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

Error i'm seeing 我看到的错误 在此处输入图片说明

getAllBlobsJS should return as an observable so that you can subscribe to it. getAllBlobsJS应该以可观察的形式返回,以便您可以订阅它。

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(); })}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM