Rumah >hujung hadapan web >tutorial js >Mengapa Janji Rantaian Kembali Tidak Ditakrifkan dalam Beberapa Kes?

Mengapa Janji Rantaian Kembali Tidak Ditakrifkan dalam Beberapa Kes?

Susan Sarandon
Susan Sarandonasal
2024-10-19 22:15:02476semak imbas

Why Does Promise Chaining Return Undefined in Some Cases?

Mengapa undefined dikembalikan oleh .then() dalam Promise Chaining?

Dalam Promise chaining, .then() mengembalikan objek Promise baharu . Walau bagaimanapun, jika tiada nilai atau Promise dikembalikan secara eksplisit daripada panggilan balik .then(), Promise yang terhasil akan diselesaikan kepada undefined.

Pertimbangkan kod berikut:

<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
});</code>

Dalam kod ini, data tidak ditentukan dalam .then() akhir kerana .then() yang pertama tidak mengembalikan sebarang nilai. Untuk membetulkannya, kita boleh mengubah suai .then() pertama untuk mengembalikan nilai hasil:

<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; // Return result to avoid undefined
  });
}

doStuff(9)
.then(data => {
  console.log("data is: " + data); // data is no longer undefined
});</code>

Atas ialah kandungan terperinci Mengapa Janji Rantaian Kembali Tidak Ditakrifkan dalam Beberapa Kes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn