-2
votes

Pourquoi j'ai besoin de résoudre une réponse en promesse

J'ai une promesse comme ci-dessous: XXX

Pourquoi j'ai besoin de résoudre cette promesse avec les données de réponse?

Que se passe-t-il si je remplace résolution (objet.assign ({}, réponse.data)); ligne par résolution ("AAAA"); ?

Quelqu'un peut m'aider? Merci.


5 commentaires

alors votre promesse va résoudre avec "aaa" . Donc promesse.then (res => console.log (res)) donnerait "aaa" au lieu d'un objet


Promise - MDN


Axios.post retourne déjà une promesse. Envelopper ce code dans un Nouvelle promesse ((résolution, rejet) => {}) n'est pas seulement pas nécessaire mais aussi un modèle anti-modèle.


Axios utilise une promesse javascript natale mais peut-être que vous l'enveloppez dans Bluebird Promises, pour vos besoins, uniquement si le code n'est pas écrit par vous. sinon ne le fais pas.


@Az_ utilisant nouvelle promesse est également un modèle anti-modèle si vous souhaitez le convertir d'un type de promesse à un autre. BlueBirdPromise.Resolve (récursionnativePromise ()) serait la bonne façon de faire une conversion.


4 Réponses :


0
votes

résolution () fait exactement ce que dit le nom: il résout la promesse renvoyant la valeur dans l'appel de la fonction.

Donc, si vous avez une promesse et que c'est résolu avec résolve ('aaaaa') , cela signifie que votre promesse retournera un état réussi avec sa valeur "AAAAA".

Vous pouvez également rejeter la promesse. Cela signifierait que l'appel que vous avez échoué à un moment donné. Analogique à résolution () , rejet () accepte un paramètre qui devrait être renvoyé par la promesse.


0 commentaires

0
votes

Les promesses ont deux arguments, résolution et rejeter , utilisé pour envoyer une réponse au code d'invocation. Si votre promesse a terminé son code sans erreur, alors vous résolution () , en renvoyant la réponse (ce que vous voulez) et si cela échoue, vous rejeter () < / Code> Il transmet généralement l'erreur en tant que paramètre.

Le paramètre de la fonction de résolution sera renvoyé à la fonction d'invocation, dans le rappel puis , tandis que le paramètre de la fonction de rejet peut être trouvé dans le rachat Catch .

par exemple xxx

Vous pouvez penser que le résoudre en tant que retour dans un contexte asynchrone , tandis que le rejet est similaire à jette une exception qui sera prise par le code d'invocation.

donc résolution (myvariable) < / code> retournera myvariable au code appelé la fonction de promesse, tandis que résolution ('AAA') retournera toujours "AAA" au code d'invocation.


0 commentaires

0
votes

Tout ce qu'il fera, c'est appeler le succès Callback résoudre avec l'argument "AAAA" au lieu de sa valeur d'origine.

Disons que vous passez la fonction de rappel console.log . Si la promesse résout, c'est-à-dire une réussite, le rappel sera appelé avec l'argument transduit ( console.log ("AAAA") )

Si cela ne résolve pas - si elle est infructueuse - alors le rappel rejette sera appelé selon votre .Catch () instruction.


0 commentaires

1
votes

Quelque chose qui mérite de mentionner est axios.post () code> renvoie déjà un prometteur code> de sorte que vous n'avez pas besoin de l'envelopper dans une autre promesse.

Cela fonctionnera à la place: P>

function delay(duration) {
  return new Promise(resolve => setTimeout(resolve, duration));
}

delay(1000).then(() => {
  console.log('this code is delayed by 1s');
});


0 commentaires