Heim > Web-Frontend > js-Tutorial > Hauptteil

Warum gibt .then(), das mit einem Versprechen verkettet ist, Undefiniert zurück?

Susan Sarandon
Freigeben: 2024-10-19 22:17:29
Original
378 Leute haben es durchsucht

Why Does .then() Chained to a Promise Return Undefined?

Warum .then() Chained to a Promise Undefiniert zurückgibt

Bedenken Sie den folgenden Codeausschnitt:

<code class="js">function doStuff(n) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(n * 10);
    }, Math.floor(Math.random() * 1000));
  })
  .then((result) => {
    if (result > 100) {
      console.log(`${result} is greater than 100`);
    } else {
      console.log(`${result} is not greater than 100`);
    }
  });
}

doStuff(9)
.then((data) => {
  console.log(data); // undefined, why?
});</code>
Nach dem Login kopieren

Warum ist der Wert der Daten im zweiten .then()-Rückruf undefiniert?

Antwort:

Wenn Sie einen .then()-Rückruf mit einem Promise verketten, wird er gibt ein neues Promise zurück, das in den Rückgabewert des Rückrufs aufgelöst wird. Im bereitgestellten Code wird jedoch vom ersten .then() kein Wert oder Promise zurückgegeben.

Lösung:

Um das Problem zu beheben, müssen Sie zurückkehren einen Wert oder rufen Sie eine andere Funktion auf, die einen Wert oder ein Versprechen vom ersten .then() zurückgibt. Hier ist eine aktualisierte Version des Codes:

<code class="js">function doStuff(n) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(n * 10);
    }, Math.floor(Math.random() * 1000));
  })
  .then((result) => {
    if (result > 100) {
      console.log(`${result} is greater than 100`);
    } else {
      console.log(`${result} is not greater than 100`);
    }

    // Return `result` here to avoid undefined at chained `.then()`.
    return result;
  });
}

doStuff(9)
.then((data) => {
  console.log(`data is: ${data}`); // data is not undefined
});</code>
Nach dem Login kopieren

In diesem aktualisierten Code gibt die erste .then() den Wert des Ergebnisses zurück (n multipliziert mit 10), was sicherstellt, dass die zweite .then() empfängt ein definierter Wert als Argument.

Das obige ist der detaillierte Inhalt vonWarum gibt .then(), das mit einem Versprechen verkettet ist, Undefiniert zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!