【发布时间】:2020-10-23 06:33:50
【问题描述】:
我正在开发一个实现文件上传功能的 Angular 项目。 我创建了一个上传服务,并在其中创建了一个用于上传文件的函数
service.ts :
upload(file: File){
return new Promise(resolve=>{
var file = file;
bucket.upload(file).on("httpUplaodprogress", (progress)=>{
const percent = progress.percent
--> Here I want to emit this percent value from this function. and want to get it where it is from called.
}).send(response =>{
response.error ? reject(response.err);
resolve(response);
})
})
}
现在很多地方都在使用这个上传服务。
例如:
uploadComponent.ts :
progress:number = 0;
constructor(private uploadService: UploadService) {}
handleFileInput(file){
this.uploadService.upload(file).then(result=>{
result ? show success msg for file uplaod success : show error
==> I want to subscribe service's upload function's progress variable
here for assign that value into this host component's progress variable which is
bind with progressbar copmponent.
})
}
uploadComponent.html
<progressbar [progress]="progress" />
这是当前场景,我们无法将进度变量从服务函数访问到调用服务函数的主机组件。
一种方式是,我们可以将订阅服务功能获取到主机组件中,并且可以不断获取进度值。但是如何?
因为服务功能已经返回承诺。如何在 Promise 中使用订阅并将其订阅到主机组件中。
我还考虑过将全局订阅变量加入服务并将其订阅到主机组件中。但是从多个地方上传文件并显示进度条时可能会导致问题。
我想为每次调用保留订阅变量的本地范围。
如果有人知道它,如何从 Promise 函数广播值并在调用它的主机函数中接收..然后请回复。这对我很有帮助。
【问题讨论】:
标签: angular promise observable subscription