0
votes

Je veux retourner la valeur de la fonction async dans l'objet

J'ai une fonction asynchrone. Et je veux créer un objet et la valeur des propriétés de l'objet est le retour de la fonction ASYNC. Mais maintenant, la valeur de la propriété est une promesse d'objet

mon code est comme celle-ci: p>

p>

const promise1 = new Promise(function(resolve, reject) {
  resolve('myvalue');
});
const a = async () => {
  var b = await promise1
  return b;
}
const newobj = {'a': a()};

console.log(newobj)

// the result is : {a: Promise {<resolved>: "myvalue"}} but i want {a: "myvalue"}


2 commentaires

Tu ne peux pas faire ça. Vous pouvez utiliser .Chen () avec la promesse renvoyée et construire votre valeur dans le rappel.


Envelopper une promesse dans une fonction async ne rend pas le résultat disponible de manière synchrone.


3 Réponses :


0
votes

Vous devez attendre votre fonction Async. Par conséquent, xxx

do xxx

a () retourne une promesse, attendre un () est (sera) la valeur renvoyée par cette promesse.


1 commentaires

Le problème ici est que vous ne pouvez utiliser que attendre à partir de inside an async fonction.



1
votes

Le problème avec votre code est vous affectant retour d'un code> (qui est une fonction asynchraine, il renvoie donc un prometteur code>) sur newobj.a Code>

Une fonction ASYNC peut contenir une expression attendue qui pause l'exécution de la fonction ASYNC et attend la résolution de la promesse transmise, puis reprend l'exécution de la fonction ASYNC et renvoie la valeur résolue. Vous pouvez en savoir plus sur ici

N'oubliez pas que le mot clé attendu n'est valable que dans les fonctions ASYNC. Si vous l'utilisez en dehors d'une fonction async de la fonction, vous obtiendrez une SyntaxError. P> blockQuote>

Approche 1 forte> p>

p>

(async() => {
  const promise1 = new Promise(function(resolve, reject) {
    resolve('myvalue');
  });
  const a = async() => {
    var b = await promise1
    return b;
  }
  const newobj = {
    'a': await a()
  };

  console.log(newobj)
})();


3 commentaires

Mon problème est que je veux retourner une valeur dans PrintData Cons Promise1 = nouvelle promesse (fonction (résolution, rejet) {résolution (myvalue ');}); const a = async () => {var b = attendre la promesse1 retour b; } const printData = async () => {const newobj = {'a': attendre un ()}; Retour NEWOBJ} PrintData ()


enveloppez tout dans une fonction d'async ife et attend ensuite à l'intérieur


@johnsonandriatiana J'ai ajouté la deuxième approche de la réponse.



1
votes

Le problème ici est que fonctionnant a () em> retournera une promesse forte>, afin de assigner em> le résultat de la promesse, Vous devriez attendre que cela finisse en premier.

Voici une approche possible: p>

p>

const promise1 = new Promise(function(resolve, reject) {
  resolve('myvalue');
});
const a = async () => {
  var b = await promise1
  return b;
}
const run = async () => {
  const newobj = {'a': await a()};
  console.log(newobj);
}

run()


   


0 commentaires