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