web-dev-qa-db-fra.com

Dactylo retournant un argument de type 'void' n'est pas attribuable au paramètre de type 'TimerHandler?

Je veux mettre à jour le nombre de messages reçus par utilisation sur le serveur en direct dans angular 7 comme nous l'avons dans Facebook et linkedin sur la page principale et j'ai essayé le code suivant: -

le code pour récupérer le message: -

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

    }
  }
}

lors de l'envoi du nouveau message, il doit être mis à jour sans recharger la page, quelqu'un peut-il me dire ce que je peux faire pour y parvenir?

8
Atul kumar singh

Le problème est que setInterval() a besoin d'une fonction comme premier argument (également appelé comme fonction de rappel). Ensuite, il exécute cette fonction après la durée définie. Et non seulement exécuter la fonction une fois en tant que setTimeout() mais régulièrement après l'intervalle de temps donné. Mais vous ne donnez pas de fonction dans votre code

window.setInterval(this.getMessages(id), 5);

mais juste donner un retour de valeur par la fonction getMessages(id).

Donc, la bonne façon devrait être

window.setInterval(() => this.getMessages(id), 5);

qui donne maintenant une fonction qui peut être exécutée après un laps de temps donné.

Et il existe une autre méthode où vous pouvez appeler la fonction par function.call().

window.setInterval(() => this.getMessages.call(this, id), 5)

La méthode call() appelle une fonction avec une valeur this et des arguments fournis individuellement.

J'espère que ceci vous aidera. (Veuillez me corriger s'il y a quelque chose de mal. Merci à l'avance)

1
Isuru Maldeniya