【问题标题】:delete Cloud Firestore doc and Fire Storage file simultaneously同时删除 Cloud Firestore 文档和 Fire Storage 文件
【发布时间】:2020-12-11 23:19:21
【问题描述】:

我有一个 Cloud Firestore 文档集合(关于我上传的文件的元数据),并且我在 Firebase 存储中有这些文件的存储桶。

我想使用我的 Angular 应用程序删除给定的文件。我可以删除 Firestore 文档,但无法删除 Storage 中的相应文件。

编译错误: Property 'then' does not exist on type 'Observable<any>'.

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';                      // I was experimenting with onPromise()
import { finalize, tap } from 'rxjs/operators';
import { AngularFireStorage } from '@angular/fire/storage';
import { StateService } from '../services/state.service';

// ...

export class AdminComponent implements OnInit {

    isProgressVisible: boolean;

    constructor(private storage: AngularFireStorage, public stateService: StateService) {
        this.isProgressVisible = false;
    }

    // ...    

    deleteFile(file): void {
        this.isProgressVisible = true;

        let storagePath = file.storagePath;                     // ex: 'uploads/1598066351161_myfile.txt'
        let delimiter = storagePath.indexOf('/');
        let docID = file.storagePath.substring(delimiter + 1);  // ex: '1598066351161_myfile.txt'

        let self = this;
 
        this.stateService.firebase.firestore().collection('files').doc(docID).delete().then(function () {
            console.log('cloud firestore doc deleted');

            let ref = self.storage.ref(storagePath);            // delete the file from Storage
            ref.delete().then(function () {
                console.log('file deleted from storage!');
            }).catch(function (error) {
                console.error('Error deleting file from storage:', error);
            });

        }).catch(function (error) {
            console.error('Error deleting cloud firestore doc:', error);
        });
    }
}

感谢任何帮助!

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore firebase-storage


    【解决方案1】:

    this.stateService.firebase.firestore().collection('files').doc(docID).delete() 返回一个不是 promise 的 observable。您应该使用toPromise() 将其转换为promise 或使用subscribe 而不是then

    查看this post 了解更多信息。

    【讨论】:

      最近更新 更多