我正在使用rxjs 6.5.1构建ionic 4 / angular 8应用程序。
在这里,我有一个Promise,它将被转换为可观察的对象,该对象将在管道中进一步使用,以便通过用于ionic的文件插件下载文件。如代码底部所示,我创建了一个可观察对象数组,以防在设置someFlag
的情况下进行订阅。这段代码的问题在于,在将可观察对象推送到数组时,getLocationForFile(fileName)
中的代码被执行,并且在控制台中出现以下错误:
ERROR Error: Uncaught (in promise): FileError: {"code":12,"message":"PATH_EXISTS_ERR"}
。如果路径存在,则发生这种错误是非常好的。问题是该错误没有被getLocationForFile
方法的catchError运算符捕获。有趣的是,在设置someFlag
的情况下,将触发forkJoin,然后将相同的错误捕获到getLocationForFile(fileName)中的catchError中,但是未捕获的promise错误仍然存在。
private createDirectory(dirName) {
return from(this.file.createDir(path, dirName))
}
public getLocationForFile(fileName: string) {
return this.createDir().pipe(
switchMap(dirEntry => of(dirEntry.nativeURL + fileName)),
catchError(_ => of(""))
)
}
public downloadFile(fileName) {
return this.getLocationForFile(fileName).pipe(
switchMap(fileLocation => return this.file.downloadFile(url, {}, {}, fileName)),
catchError(error => of(handleError(error));
)
}
let filesToDownload = [];
for(let fileName of fileNames) {
filesToDownload.push(downloadFile(fileName))
}
if(someFlag){
forkJoin(filesToDownload).subscribe(results => {
handleResults(results)
})
}
如果我这样重写createDirectory(dirName)
private createDirectory(dirName) {
return from(this.file.createDir(path, dirName)
.then(result => of(result))
.catch(error => throwError(error))
)
}
然后处理该错误,并且我没有收到Uncaugh in promise错误。
所以一个问题是为什么createDirectory
方法中的catchError不能捕获我将可观察对象推入数组时发生的错误,而另一个是如何修复它(我不想使用最后一个代码段中的解决方法)。
谢谢!
答案 0 :(得分:0)
也许先解决您的诺言代码会解决您的问题
没有必要抓住,让错误流过
private createDirectory(dirName) {
return defer(()=>this.file.createDir(path, dirName))
}