我有一个返回一些代码的服务:
以下是服务和组件的代码:
服务中的代码
'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);
});
}
我该如何解决?
答案 0 :(得分:1)
您的结果类型是一个Promise,不是可以对其进行订阅的Observable。对于Promises,请使用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);
});
}
答案 1 :(得分:0)
Subscribe
是Observable的一种方法,但是在您的情况下,您使用的是Promise。
您应该使用.then
来获取已解析的数据。
getdirdata() {
this.filesystemService.readdir().then(data => {
console.log(data);
});
}
您甚至可以像这样使用异步等待模式:
async getdirdata() {
const data = await this.filesystemService.readdir();
}