【发布时间】:2020-09-29 00:50:08
【问题描述】:
我尝试为我的 Ionic 应用程序构建图像缓存服务。
<ion-col [routerLink]="['/category-detail',cat.objectId,i]" class="category-item"
*ngFor="let cat of categories;index as i" size="3">
<ion-img class="cat-image" [src]="getImage(cat.image.url) | async">
</ion-img>
<p class="cat-name">
{{cat.name}}
</p>
</ion-col>
我从 ion-image 中的 src 标签调用函数
async getImage(fileUrl: any) {
return await this.cacheService.checkFile(fileUrl);
}
这个函数检查一个文件,如果它在那里它返回文件的 URL,否则它在参数中返回 URL
public async checkFile(fileUrl) {
let stringURL = String(fileUrl);
let fileName = stringURL.split('//')[1].replace(/\//g, '-');
return this.file.checkFile(this.file.tempDirectory, fileName)
.then(
async result => {
if (result) {
return this.file.tempDirectory + fileName;
} else {
return fileUrl;
}
}
)
.catch(
async err => {
//FileError.NOT_FOUND_ERR
if (err.code == 1) {
let fileTransfer: FileTransferObject = this.transfer.create();
return fileTransfer.download(fileUrl, this.file.tempDirectory + fileName, true)
.then(
result => {
console.log(result);
return result;
}
)
.catch(
error => {
throw error;
}
)
} else {
throw err;
}
}
)
}
我搜索了各种问题和示例,但没有一个对我有用。
我的目标是尝试返回带有承诺链的动态 URL。
我对 Angular 中的 async、promise 和 observable 关键字感到很困惑。
我的项目配置:
Ionic:
Ionic CLI : 6.9.1 (/Users/suatkarabacak/npm/lib/node_modules/@ionic/cli)
Ionic Framework : @ionic/angular 5.1.1
@angular-devkit/build-angular : 0.803.26
@angular-devkit/schematics : 8.3.26
@angular/cli : 8.3.26
@ionic/angular-toolkit : 2.2.0
Cordova:
Cordova CLI : 9.0.0 (cordova-lib@9.0.1)
Cordova Platforms : android 8.1.0, ios 5.1.1
Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.2.1, (and 7 other plugins)
Utility:
cordova-res : 0.14.0
native-run : 1.0.0
System:
ios-deploy : 1.9.4
ios-sim : 8.0.2
NodeJS : v10.16.3 (/usr/local/bin/node)
npm : 6.9.0
OS : macOS Catalina
Xcode : Xcode 11.3 Build version 11C29
【问题讨论】:
标签: angular typescript ionic-framework async-await observable