RxJS catchError运算符未从Promise

时间:2019-11-25 12:41:31

标签: angular asynchronous rxjs observable ionic4

我正在使用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不能捕获我将可观察对象推入数组时发生的错误,而另一个是如何修复它(我不想使用最后一个代码段中的解决方法)。

谢谢!

1 个答案:

答案 0 :(得分:0)

也许先解决您的诺言代码会解决您的问题

没有必要抓住,让错误流过

private createDirectory(dirName) {
    return defer(()=>this.file.createDir(path, dirName))
}
相关问题