我想更新在角度7的实时服务器上使用的实时服务器上收到的消息数,就像我们在主页上的facebook和linkedin中一样,我已经尝试了以下代码:-
获取消息的代码:-
getMessageCount(rid:any)
{
return this.http.get<any>(this.apiUrl+'message/'+rid);
}
on the main page we have the following code run like this :-
export class HomeComponent implements OnInit {
userAuthenticated=false;
private tmessage:any;
constructor(private service:LoginService,private mService:MessagingService) {
if(this.service.currentUserValue)
{
this.userAuthenticated=true;
const id=this.service.currentUserValue.id;
window.setInterval(this.getMessages(id),5);
}
}
}
在发送新消息时,应该在不重新加载页面的情况下对其进行更新,有人可以告诉我该怎么做吗?
答案 0 :(得分:5)
问题是setInterval()
需要一个函数作为第一个参数(也称为回调函数)。然后,它会在设置的时间后执行该功能。而且不仅要以setTimeout()
的身份运行该函数一次,还要在给定的时间间隔后定期运行该函数。但是您没有在代码中提供功能
window.setInterval(this.getMessages(id), 5);
但仅通过函数getMessages(id)
给出一个值。
所以正确的方法应该是
window.setInterval(() => this.getMessages(id), 5);
现在提供了可以在给定时间后执行的功能。
还有另一种方法,您可以通过function.call()
来调用函数。
window.setInterval(() => this.getMessages.call(this, id), 5)
call()
方法调用具有给定this
值和参数的函数。
希望这会对您有所帮助。 (如果有任何问题,请纠正我。在此先感谢)
答案 1 :(得分:2)
您没有提供getMessages
,所以我不得不猜测。
我的猜测是,getMessages
是一个无效函数,正在执行某些操作,可能会更新模型/视图并且不返回任何内容,而setTimeout
的第一个参数应该是一个函数。因此,
window.setInterval(this.getMessages(id), 5);
应该是
window.setInterval(() => this.getMessages(id), 5);