【问题标题】:Angular Run some code after service finish to Upload filesAngular 在服务完成后运行一些代码以上传文件
【发布时间】:2020-08-25 05:54:01
【问题描述】:

我有这个服务功能,用于将文件上传到 Firebase 存储。 它接收一组文件并上传其中的每个文件。 它还会更新每个文件的加载状态,并在上传时填写文件的'url'。

所以,我的 component.ts 看起来像


files: [{name: 'file1', uploaded: false, url:''}, {name: 'file2', uploaded: false, url:''} ];

...

constructor( private myService: FirebaseService) { }

...

this.myService.uploadImgToFirebase(this.files);


问题是,我需要在我的组件中运行一些代码(类似于 this.SOME_ITEM.files = this.files )但就在 ALL 文件是已上传。


this.myService.uploadImgToFirebase(this.files);

// THINGS I NEED TO DO WHEN ALL THE FILES WERE UPLOADED


我怎样才能做到这一点?

【问题讨论】:

    标签: angular firebase firebase-storage


    【解决方案1】:

    Assuming 您正在拨打http 电话,该电话将返回您可以订阅的observable。

    this.myService.uploadImgToFirebase(this.files).subscribe(m => {
       //Do your operations here once its done.
    });
    

    你可以看async/await

    async function turnYourFunctionAsync() {
      return 100;
    }
    
    turnYourFunctionAsync().then(alert); // 100
    

    另一个简单的异步/等待:

    async function turnYourFunctionAsync() {
        let promise = new Promise((res, err) => {
            setTimeout(() => res("The file upload operation is complete"), 1000)
        });
    
        let response = await promise; 
    
        alert(response); 
        }
    };
    
    turnYourFunctionAsync();
    

    【讨论】:

    • 嗨@Thalaivar,感谢您的回答。但不是。我没有打和 http 电话。但你的方法可以提供帮助。如何将一个简单的函数转换为一个返回 Observable 的函数?
    • 您可以使用 asyc/await 来打开您的正常 JS 函数,该函数将返回一个承诺。在 chrome 控制台中运行上面的代码会给你 100。
    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多