Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 组件中不允许角度服务订阅_Angular_Typescript_Rxjs - Fatal编程技术网

Angular 组件中不允许角度服务订阅

Angular 组件中不允许角度服务订阅,angular,typescript,rxjs,Angular,Typescript,Rxjs,我有一个服务返回一些代码: 以下是服务和组件的代码: 服务代码: async readdir() { try { const ret = await Filesystem.readdir({ path: '', directory: FilesystemDirectory.Documents }); return ret; } catch (e) { console.error('Unable to

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

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

服务代码:

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);
    });
  }
我的问题是它不喜欢订阅

我得到:

Property 'subscribe' does not exist on type 'Promise<ReaddirResult[]>'.
类型“Promise”上不存在属性“subscribe”。

我如何解决这个问题?

您的结果类型是一个承诺,而不是一个可以订阅的可观察类型。对于承诺,使用then()获得结果

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

您可以使用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);
   });
}

Subscribe
是可观察的方法之一,但是在您的情况下,您使用的是承诺

您应该使用
。然后
获取解析数据

getdirdata() {
    this.filesystemService.readdir().then(data => {
      console.log(data);
    });
  }
您甚至可以使用异步等待模式,如:

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

是否很难将其转换为可观测值?不。无论如何,在Angular中,通常使用的是可观测值,而不是PromiseChecked,但它不喜欢我得到的常量“ret”:类型为“ReaddirResult”的参数不能分配给类型为“ObservableInput”的参数。类型“ReaddirResult”中缺少属性“[Symbol.iterator]”,但类型“Iterable”中需要属性“[Symbol.iterator]”。ts(2345)提供Filesystem.readdir()方法。您可以直接将其转换为可观察到的而不是承诺,避免使用“from”如何使其使用可观察到的?显示您的
FileSystemService
实现,然后我可以为您提供步骤。