Angular Услуга подписки не разрешена в компоненте - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть служба, которая возвращает код:

Вот код службы и компонента:

Код службы:

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[]>'.

Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Ваш тип результата - Обещание, а не Наблюдаемый, на который можно подписаться. Для Promises используйте then (), чтобы получить результат.

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

Подробнее об обещании

вы можете преобразовать результат обещания в наблюдаемый, используя оператор

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 () будет Observable:

getdirdata() {
   this.filesystemService.readdir().subscribe(data => {
      console.log(data);
   });
}
0 голосов
/ 02 апреля 2020

Subscribe - это один из методов Observable, однако в вашем случае вы используете обещание.

Вы должны использовать .then для получения разрешенных данных.

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

Вы даже можете использовать asyn c шаблон ожидания Likeo:

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