返回类型为“ void”的参数的打字稿不能分配给类型为“ TimerHandler”的参数吗?

时间:2019-04-07 14:16:49

标签: javascript angular typescript

我想更新在角度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);

    }
  }
}

在发送新消息时,应该在不重新加载页面的情况下对其进行更新,有人可以告诉我该怎么做吗?

2 个答案:

答案 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);