Comment retourner les données de la promesse
J'ai besoin d'obtenir la réponse.les données de la promesse de sorte qu'il peut être renvoyé par la fonction englobante. Je sais que j'ai probablement ne peut pas le faire de la manière que j'ai codé en raison de la normale javascript portée. Est-il possible que cela peut être fait?
La console.journal #1 produit des données correctes. console.journal #2 produit toujours 'a';
function addSiteParentId(nodeId) {
var theParentId = 'a';
var parentId = relationsManagerResource.GetParentId(nodeId)
.then(function(response){
theParentId = response.data;
console.log(theParentId); //#1
});
console.log(theParentId); //#2
return theParentId;
}
Tous les pointeurs serait appréciée.
source d'informationauteur Craig | 2016-05-30
Vous devez vous connecter pour publier un commentaire.
L'un des principes fondamentaux derrière une promesse, c'est qu'il est manipulé de façon asynchrone. Cela signifie que vous ne pouvez pas créer une promesse et ensuite l'utiliser immédiatement le résultat de façon synchrone dans votre code (par exemple, il n'est pas possible de retourner le résultat d'une promesse faite au sein de la fonction qui a initié la promesse).
Ce que vous voulez faire à la place est de retourner l'intégralité de la promesse elle-même. Alors, quel que soit fonction des besoins de son résultat peut appeler
.then()
sur la promesse, et le résultat sera là quand la promesse a été résolu.Ici est une ressource à partir de HTML5Rocks qui va sur le cycle de vie d'une promesse, et la façon dont sa sortie est résolu de manière asynchrone:
http://www.html5rocks.com/en/tutorials/es6/promises/
Je n'aime pas à l'aide d'une fonction pour gérer une propriété qui a été résolu, encore et encore, dans chaque contrôleur et de service. Semble je ne suis pas la seule 😀
N'avez pas essayé d'obtenir des résultats avec une promesse comme une variable, bien sûr, aucun moyen. Mais je l'ai trouvé et l'utilisation d'une solution ci-dessous pour accéder à la suite d'une propriété.
Tout d'abord, écrire suite à une propriété de votre service:
Maintenant, nous avons juste besoin de s'assurer que la méthode addSiteParentId toujours être résolus avant que nous avons accédé à la propriété theParentId. Nous pouvons atteindre cet objectif par l'utilisation de certaines façons.
Utiliser les résoudre dans le routeur méthode:
résoudre: {
parentId: function (your_factory){
your_factory.addSiteParentId();
}
}
puis de contrôleur et d'autres services utilisés dans votre routeur, il suffit d'appeler your_factory.theParentId pour obtenir votre propriété.
Referce ici pour plus d'informations:
http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx
Utiliser " run " de la méthode d'application pour résoudre votre service.
app.exécuter(function(your_factory){your_factory.addSiteParentId();})
Pour l'injecter dans le premier contrôleur ou les services du contrôleur. Dans le contrôleur, on peut appeler tous les requis init services. Ensuite, tous les restent les contrôleurs comme les enfants de contrôleur principal peut être consulté à cette propriété normalement comme vous le souhaitez.
Choisi vos moyens dépendent de votre contexte dépendent de l'étendue de la variable et la lecture de la fréquence de votre variable.
Une façon de renvoyer des données sur une promesse est de cette façon
Objet.attribuer : https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Vous devez retourner un promesse au lieu d'une variable.
Donc, dans votre fonction juste retour:
Et, plus tard, de résoudre le retour de la promesse.
Ou vous pouvez faire un autre reportés et résoudre
theParentId
avec elle.