J'ai la fonction suivante, en essayant d'utiliser des promesses.
var getDefinitions = function(){
return new Promise(function(resolve){
resolve(ContactManager.request("definition:entities"));
});
}
var definitions = getDefinitions()
est de retour:
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: child}
Je veux obtenir la valeur de PromiseValue, mais en demandant
var value = definitions.PromiseValue
me donne un résultat indéfini.
Ma question est la suivante: que signifient les doubles crochets [[ ]]
et comment puis-je récupérer la valeur de [[PromiseValue]]
.
J'ai aussi abordé ce problème aujourd'hui et il m'est arrivé de trouver une solution.
Ma solution ressemble à ceci:
fetch('http://localhost:3000/hello')
.then(dataWrappedByPromise => dataWrappedByPromise.json())
.then(data => {
// you can access your data here
console.log(data)
})
Ici, dataWrappedByPromise
est une instance Promise
. Pour accéder aux données dans l'occurrence Promise
, j'ai constaté qu'il me fallait juste unwrap cette instance avec la méthode .json()
.
J'espère que cela pourra aider!
Ceci exemple est avec reagir mais pour la plupart il devrait être le même.
Remplacez this.props.url par votre URL à récupérer pour le faire fonctionner pour la plupart des autres frameworks.
L'analyse de res.json () renvoie la [[promiseValue]], mais si vous la renvoyez ensuite à une autre méthode .then () ci-dessous, vous pouvez la renvoyer sous la forme d'un tableau total.
let results = fetch(this.props.url)
.then((res) => {
return res.json();
})
.then((data) => {
return data;
})
Je pense que cela ira bien avec cela.
(async () => {
let getDefinitions = await ( () => {
return new Promise( (resolve, reject) => {
resolve(ContactManager.request("definition:entities"));
});
})();
)();
En lisant la page de manuel , on peut voir que:
De par sa conception, l'état et la valeur instantanés d'une promesse ne peuvent pas être inspecté de manière synchrone à partir du code, sans appeler la méthode
then()
.Pour aider au débogage, uniquement lors de l'inspection d'un objet de promesse manuellement, vous pouvez voir plus d'informations en tant que propriétés spéciales qui sont inaccessible depuis le code (actuellement, ceci est implémenté par randomiser le nom de la propriété, faute de support plus sophistiqué language ou debugger).
L'accent est à moi. Par conséquent, ce que vous voulez faire ne peut pas être fait. La meilleure question est pourquoi avez-vous besoin d'accéder à l'état de promesse de cette manière?