我正在使用rxjs和firestore创建一个有角度的应用程序。
我正在使用的功能需要更新项目的百分比。
因为它占用大量资源,所以我只更新可见项目的百分比。
使用开始日期,结束日期和当前日期计算百分比。因此,如果我们正在进行项目的一半,则该百分比将指示50%。
现在我订阅了该项目,并使用公式来计算百分比并将其推送到数据库。关键是,我需要每1秒重新计算该百分比(或任意多次,我只需要准确),以便可以相应地更新该百分比。
这是它的样子:
var date_percentage = this.get("projects","uz9o3cGSHq7q1p7utujq").map(
res=>{
if (this.date_percentage_calculator(res.data().start_date,res.data().end_date) >= 100) return 100
else if (this.date_percentage_calculator(res.data().start_date,res.data().end_date) <= 0) return 0
else return this.date_percentage_calculator(res.data().start_date,res.data().end_date)
}
).subscribe(calculated_percentage=>{
this.update_proprety("projects","uz9o3cGSHq7q1p7utujq","percentage",calculated_percentage)
})
现在项目可能不会被修改,因此更新程序可能只会被调用一次。
我如何使可观察对象重新发送最新值,以便如果可观察对象未收到值,它可以更新百分比事件?
答案 0 :(得分:0)
如果我正确理解您的电话号码,但是无论如何您希望每1秒发出一次,对吧?
python.exe
这会重新发出每秒可观察到的源中的最后结果。
答案 1 :(得分:0)
再次感谢您的回答,不胜感激。
在找到答案并在线查找后,我找到了解决问题的解决方案。我认为它不是最佳选择,但它可以满足我的需求。
这是它的样子:
var temp = new BehaviorSubject(null);
var temp = new BehaviorSubject(null);
var temp2 = this.sub_to("projects", "uz9o3cGSHq7q1p7utujq").subscribe(
res=>{
temp.next({date1:res.payload.data()["start_date"],date2:res.payload.data()["end_date"]})
}
)
temp.subscribe(
res => {
console.log(res)
setTimeout(function(){ temp.next(temp.value) }, 30000);
if (res){
this.update_proprety("projects","uz9o3cGSHq7q1p7utujq","percentage",this.date_percentage_calculator(res.date1,res.date2))
}
}
)
temp2是可观察的项目,并且在更新项目时,他会更改temp2的值,并进行适当的修改。
现在每隔30秒temp2将他的值更改为他的实际值,这样即使项目未更改,我也可以更新百分比事件