Heim  >  Fragen und Antworten  >  Hauptteil

Wie erhält man den Wert eines Versprechens?

<p>Ich habe in der Angular-Dokumentation nach Beispielen für <code>$q</code> gesucht, dachte aber, dass dies für Versprechen im Allgemeinen funktionieren könnte. Das folgende Beispiel wurde direkt aus ihrer Dokumentation kopiert, einschließlich ihrer Kommentare: </p> <pre class="brush:php;toolbar:false;">promiseB = PromiseA.then(function(result) { Rückgabeergebnis + 1; }); // Wenn PromiseA aufgelöst wird, wird PromiseB sofort aufgelöst und sein Wert ist das Ergebnis von PromiseA plus 1</pre> <p>Ich bin mir nicht sicher, wie das funktioniert. Wenn ich <code>.then()</code> für das Ergebnis des ersten <code>.then()</code> aufrufen und sie miteinander verketten könnte, dann wüsste ich, dass ich das tun könnte ;code>promiseB</code> ist ein Promise-Objekt vom Typ <code>Object</code>. Es handelt sich nicht um eine <code>Nummer</code>. Was meinen sie also mit „sein Wert wird das Ergebnis von Versprechen A plus 1 sein“? </p> <p>Soll ich wie <code>promiseB.value</code> darauf zugreifen? Wie kann ein Erfolgsrückruf ein Versprechen zurückgeben und „Ergebnis + 1“ zurückgeben? Ich vermisse etwas. </p>
P粉116631591P粉116631591403 Tage vor411

Antworte allen(2)Ich werde antworten

  • P粉616111038

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

    当一个promise被解决/拒绝时,它会调用它的成功/错误处理程序:

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

    then方法也返回一个promise:promiseB,它将根据promiseA的成功/错误处理程序的返回值来解决/拒绝

    promiseA的成功/错误处理程序可以返回三个可能的值,这些值将影响promiseB的结果:

    1. 不返回任何值 → promiseB立即解决,并且undefined被传递给promiseB的成功处理程序
    2. 返回一个值 → promiseB立即解决,并且该值被传递给promiseB的成功处理程序
    3. 返回一个promise → 当promise解决时,promiseB将解决。 当promise被拒绝时,promiseB将被拒绝。传递给promiseB的then处理程序的值将是promise的结果

    有了这个理解,你可以理解下面的内容:

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

    then调用立即返回promiseB。

    当promiseA被解决时,它将结果传递给promiseA的成功处理程序。

    由于返回值是promiseA的结果+1,成功处理程序返回一个值(上面的选项2),因此promiseB将立即解决,并且promiseB的成功处理程序将被传递promiseA的结果+1。

    Antwort
    0
  • P粉155128211

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

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

    在这种情况下,promiseA解决为一个值-result,然后立即使用result + 1的值解决promiseB

    访问promiseB的值与访问promiseA的结果的方式相同。

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

    ECMAScript 2016(ES7, 2016)开始,async/await在JavaScript中成为标准,它允许一种替代上述方法的语法。现在你可以这样写:

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

    现在没有promiseB了,因为我们使用await解开了promiseA的结果,并且你可以直接使用它。

    然而,await只能在async函数内部使用。所以稍微放大一点,上述代码需要包含在一个函数内:

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

    需要明确的是,这个例子中doSomething函数的返回值仍然是一个promise,因为async函数返回的是promise。所以如果你想要访问返回值,你需要使用result = await doSomething(),这只能在另一个async函数内部使用。基本上,在父级async上下文中,你可以直接访问子级async上下文产生的值。

    Antwort
    0
  • StornierenAntwort