组件中不允许Angular Service订阅

时间:2020-04-02 09:12:13

标签: angular typescript rxjs

我有一个返回一些代码的服务:

以下是服务和组件的代码:

服务中的代码

'System.Data.SqlClient.SqlException (0x80131904): A file activation error occurred. The physical file name '.\App_Data\TRTF_TagLogging.mdf' may be incorrect.'

组件中的代码

async readdir() {
    try {
      const ret = await Filesystem.readdir({
        path: '',
        directory: FilesystemDirectory.Documents
      });
      return ret;
    } catch (e) {
      console.error('Unable to read dir', e);
    }
  }

我的问题是它不喜欢订阅...

我得到:

getdirdata() {
    this.filesystemService.readdir().subscribe(data => {
      console.log(data);
    });
  }

我该如何解决?

2 个答案:

答案 0 :(得分:1)

您的结果类型是一个Promise,不是可以对其进行订阅的Observable。对于Promises,请使用then()获得结果。

getdirdata() {
   this.filesystemService.readdir().then(data => {
      console.log(data);
   });
}

More about Promise

您可以使用from运算符将promise结果转换为可观察的结果

import { from } from 'rxjs';
async readdir() {
    try {
      const ret = await Filesystem.readdir({
        path: '',
        directory: FilesystemDirectory.Documents
      });
      return from(ret);
    } catch (e) {
      console.error('Unable to read dir', e);
    }
  }

然后您可以订阅答案,因为readdir()结果将是可观察的:

getdirdata() {
   this.filesystemService.readdir().subscribe(data => {
      console.log(data);
   });
}

答案 1 :(得分:0)

Subscribe是Observable的一种方法,但是在您的情况下,您使用的是Promise。

您应该使用.then来获取已解析的数据。

getdirdata() {
    this.filesystemService.readdir().then(data => {
      console.log(data);
    });
  }

您甚至可以像这样使用异步等待模式:

async getdirdata() {
    const data = await this.filesystemService.readdir();
  }