1
votes

Obtenir la valeur de la fonction anonyme TypeScript

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


4 commentaires

déclarer à l'extérieur de la classe typographique var temp = "" ou à l'intérieur du constructeur typographique var 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


3 Réponses :


2
votes

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


2 commentaires

@jitender Pourquoi de cette façon la première valeur est toujours indéfinie ??


première valeur signifie?



0
votes

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


0 commentaires

3
votes

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


4 commentaires

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é