TypeError:_this。不是函数

时间:2018-04-10 12:55:28

标签: angular typescript angular-services

当我尝试从另一个服务函数调用的subscribe()方法中调用服务函数时,我收到一个奇怪的错误。 TypeError声明:

TypeError: _this.fileloaderService.downloadFile is not a function

我有两个服务,一个用于获取一些剧集,另一个用于加载文件的内容。我导入它们并将它们包含在我的EpisodesComponent构造函数中,如下所示:

import { EpisodeService } from '../episode.service';
import { FileloaderService } from '../fileloader.service';

constructor(private episodeService: EpisodeService,
  private fileloaderService: FileloaderService) { }

然后我收到我的剧集,当它们被退回时,我尝试从我的剧集对象中的一个字段加载一个文件:

getEpisodes(): void {
  this.episodeService.getEpisodes().subscribe(episodes => {
    this.episodes = episodes;
    for (let i of this.episodes) {
      this.fileloaderService.downloadFile(i.fileUrl).subscribe(file => {
        i['file'] = file;
      });
    }
  });
}

但是,在控制台运行时,它会抱怨downloadFile()方法不存在。但是它正确编译,你可以看到它确实存在 在下面的服务中。

@Injectable()
export class FileloaderService {

  constructor(private http: HttpClient) { }

  downloadFile(fileUrl): Observable<Text> {
    let options = new RequestOptions({responseType: ResponseContentType.Text});
    return this.http.get(fileUrl, options)
      .catch(this.handleError('downloadFile'));
  }

似乎抱怨它不存在/没有实例化或者某种东西,但我创建和包含这两种服务的方式是相同的。

有什么想法吗? (我对Typescript来说是全新的,所以请放轻松我!)提前感谢...

编辑1 :我使用ng serve --open运行此操作 我已经包括:

console.log("fileloaderService:" + JSON.stringify(this.fileloaderService));

在getEpisodes()。subscribe()函数内部输出:

fileloaderService: {}

编辑2 :我还将服务添加到app.module.ts提供商,如下所示:

providers: [EpisodeService, FileloaderService],

编辑3 :我已经在这里简化了应用程序的stackblitz:

https://stackblitz.com/edit/angular-sazw43

不幸的是,我现在正努力让内存中的web-api内容正常工作,但你应该能够看到我所拥有的一切(我认为)

2 个答案:

答案 0 :(得分:0)

你可以尝试这样吗

getEpisodes(): void {
  this.episodeService.getEpisodes().subscribe(episodes => {
    this.episodes = episodes;
    var self = this;
    for (let i of this.episodes) {
      self.fileloaderService.downloadFile(i.fileUrl).subscribe(file => {
        i['file'] = file;
      });
    }
  });
}

答案 1 :(得分:0)

这似乎是由于downloadFile()方法中的http.get()没有正确格式化引起的,除了我试图使用的RequestOptions对象之外没有。

这是因为我认为使用已弃用的@ angular / http库和更新的@ angular / common / http

对不起浪费每个人的时间