Maison  >  Questions et réponses  >  le corps du texte

Comment obtenir la valeur de la promesse ?

<p>Je regardais la documentation Angular pour des exemples de <code>$q</code>, mais j'ai pensé que cela pourrait fonctionner pour les promesses en général. L'exemple ci-dessous est copié directement de leur documentation, y compris leurs commentaires : </p> <pre class="brush:php;toolbar:false;">promiseB = promiseA.then(function(result) { renvoyer le résultat + 1 ; }); // Lorsque promiseA est résolue, promiseB sera résolue immédiatement et sa valeur sera le résultat de promiseA plus 1</pre> <p>Je ne sais pas comment cela fonctionne. Si je pouvais appeler <code>.then()</code> sur le résultat du premier <code>.then()</code>, en les enchaînant ensemble, je sais que je pourrais le faire, alors < ;code>promiseB</code> est un objet de promesse de type <code>Object</code>. Il ne s'agit pas d'un <code>Numéro</code>. Alors, que veulent-ils dire par « sa valeur sera le résultat de la promesse A plus 1 » ? </p> <p>Dois-je y accéder comme <code>promiseB.value</code> ? Comment un rappel réussi peut-il renvoyer une promesse et renvoyer « résultat + 1 » ? Il me manque quelque chose. </p>
P粉116631591P粉116631591403 Il y a quelques jours408

répondre à tous(2)je répondrai

  • P粉616111038

    P粉6161110382023-08-22 12:43:32

    Lorsqu'une promesse est résolue/rejetée, elle appelle son gestionnaire de réussite/erreur :

    var promiseB = promiseA.then(function(result) {
       // 用result做一些事情
    });
    La méthode

    then renvoie également une promesse : promiseB qui sera résolue/rejetée en fonction de la valeur de retour du gestionnaire de succès/erreur de promiseA.

    Le gestionnaire de réussite/erreur de

    promiseA peut renvoyer trois valeurs possibles qui affecteront le résultat de promiseB :

    1. Ne renvoie aucune valeur → promiseB se résout immédiatement et undefined est transmis au gestionnaire de réussite de promiseB
    2. Renvoie une valeur → promiseB se résout immédiatement et la valeur est transmise au gestionnaire de réussite de promiseB
    3. Renvoyer une promesse → Lorsque la promesse est résolue, la promesseB se résoudra. Lorsque la promesse est rejetée, la promesseB sera rejetée. La valeur transmise au gestionnaire de promiseB sera alors le résultat de promise

    Avec cette compréhension, vous pouvez comprendre ce qui suit :

    promiseB = promiseA.then(function(result) {
      return result + 1;
    });

    Ensuite, l'appel renvoie immédiatement la promesseB.

    Lorsque promiseA est résolue, elle transmet le résultat au gestionnaire de réussite de promiseA.

    Puisque la valeur de retour est le résultat de promiseA + 1 et que le gestionnaire de succès renvoie une valeur (option 2 ci-dessus), promiseB sera résolue immédiatement et le gestionnaire de succès de promiseB recevra le résultat de promiseA + 1.

    répondre
    0
  • P粉155128211

    P粉1551282112023-08-22 00:10:42

    La valeur renvoyée dans la fonction de réussite de

    promiseAthen函数返回一个新的promise(promiseB),在promiseA解决后立即解决,其值是在promiseA.

    Dans ce cas, promiseA解决为一个值-result,然后立即使用result + 1的值解决promiseB.

    Accédez aux résultats de promiseB的值与访问promiseA de la même manière.

    promiseB.then(function(result) {
        // 这里你可以使用promiseB的结果
    });

    À partir de ECMAScript 2016 (ES7, 2016), async/awaitdevient le standard en JavaScript, ce qui permet une syntaxe alternative à l'approche ci-dessus. Maintenant vous pouvez écrire comme ceci :

    let result = await functionThatReturnsPromiseA();
    result = result + 1;

    Il n'y a pas de promesseB maintenant car nous avons déroulé le résultat de la promesseA en utilisant awaitet vous pouvez l'utiliser directement.

    Cependant, await只能在async ne peut être utilisé que dans une fonction async. Donc en zoomant un peu, le code ci-dessus doit être contenu dans une fonction :

    async function doSomething() {
        let result = await functionThatReturnsPromiseA();
        return result + 1;
    }

    Pour être clair, dans cet exemple doSomething函数的返回值仍然是一个promise,因为async函数返回的是promise。所以如果你想要访问返回值,你需要使用result = await doSomething(), cela ne peut être utilisé que dans une autre fonction asynchrone. Fondamentalement, dans le contexte asynchrone parent, vous avez un accès direct aux valeurs produites par le contexte asynchrone enfant.

    répondre
    0
  • Annulerrépondre