J'ai un projet Angular et j'utilise le Signalr à l'intérieur. Mais quand j'obtiens le connectionId, je peux l'imprimer. Mais je ne peux pas l'affecter dans la variable globale. Voici mon code:
connection = new signalR.HubConnectionBuilder().withUrl("http://localhost:8178/notifyHub").build();
connection.start().then(function () {
connection.invoke("GetConnectionId").then(function (connectionId) {
console.log(connectionId);
// var temp=connectionId
})
}).catch(err => console.error(err));
3 Réponses :
au lieu de function , utilisez expressions de fonction de flèche comme
connection = new
signalR.HubConnectionBuilder().withUrl("http://localhost:8178/notifyHub").build();
connection.start().then(()=> {
connection.invoke("GetConnectionId").then((connectionId)=> {
console.log(connectionId);
// here you will be able to access this
})
}).catch(err => console.error(err));
@jitender Pourquoi de cette façon la première valeur est toujours indéfinie ??
première valeur signifie?
Essayez de cette façon:
connectionId: any;
connection = new
signalR.HubConnectionBuilder().withUrl("http://localhost:8178/notifyHub").build();
connection.start().then(function () {
connection.invoke("GetConnectionId").then(function (connectionId) {
console.log(connectionId);
this.connectionId = connectionId
})
}).catch(err => console.error(err));
Vous pouvez résoudre la même chose en utilisant ce qui suit:
temp;
connection = new signalR.HubConnectionBuilder().withUrl("http://localhost:8178/notifyHub").build();
connection.start().then(() => {
connection.invoke("GetConnectionId").then((connectionId) => {
console.log(connectionId);
this.temp = connectionId;
})
}).catch(err => console.error(err)
ou la meilleure solution est d'utiliser use expression de la fonction flèche :
temp;
let self = this;
let connection = new signalR.HubConnectionBuilder().withUrl("http://localhost:8178/notifyHub").build();
connection.start().then(function () {
connection.invoke("GetConnectionId").then(function (connectionId) {
console.log(connectionId);
self.temp = connectionId;
})
}).catch(err => console.error(err));
une raison de ne pas utiliser la fonction flèche et d'effectuer des étapes supplémentaires pour activer la même chose?
@jitender vous avez raison d'utiliser les fonctions fléchées, c'est mieux, je n'ai rien contre ça :)
vous pouvez mettre à jour votre réponse pour utiliser la fonction de flèche, donc plus tard, si quelqu'un d'autre vient ici avec le même problème, OP devrait aller dans la bonne direction
@jitender j'ai mis à jour la réponse comme vous l'avez demandé
déclarer à l'extérieur de la classe typographique
var temp = ""ou à l'intérieur du constructeur typographiquevar temp: string = "";puis attribuez-lui une classe dactylographiée.@jitender exactement
Le problème est la portée de votre fonction. Selon la réponse de @ jitender, la notation en grosse flèche permettra d'utiliser la bonne portée, à moins que vous ne vouliez implicitement une portée de niveau bloc.
@mohammadalmasi a accepté et n'est pas la bonne façon de résoudre le problème