首页 > 解决方案 > Angular 在服务完成后运行一些代码以上传文件

问题描述

我有这个服务功能,用于将文件上传到 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),但就在所有文件都上传的时候。


this.myService.uploadImgToFirebase(this.files);

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


我怎样才能做到这一点?

标签: angularfirebasefirebase-storage

解决方案


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();

推荐阅读