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
实现,然后我可以为您提供步骤。