Rumah >hujung hadapan web >tutorial js >Adakah Fungsi Async Sentiasa Mengembalikan Janji, Walaupun Tanpa Pulangan Jelas?

Adakah Fungsi Async Sentiasa Mengembalikan Janji, Walaupun Tanpa Pulangan Jelas?

Patricia Arquette
Patricia Arquetteasal
2024-12-17 21:48:12400semak imbas

Do Async Functions Always Return Promises, Even Without Explicit Returns?

Pulangan Tersirat Janji dalam Fungsi Async

Bertentangan dengan andaian bahawa fungsi async mengembalikan nilai ekspresi menunggu secara langsung, ia sebenarnya sentiasa kembali sebuah janji. Dalam kes di mana penyataan pemulangan eksplisit tidak hadir, nilai yang akan dikembalikan secara automatik dibungkus dalam janji. Ini berlaku untuk semua nilai pulangan, termasuk bukan janji.

Contoh:

async function increment(num) {
  return num + 1;
}

increment(3).then(num => console.log(num)); // Logs 4

Dalam senario ini, walaupun nombor dikembalikan, ia masih terkandung dalam janji. Ini jelas apabila mengakses nilai yang dikembalikan melalui kaedah then().

Kes Lain:

  • Fungsi tanpa penyataan pulangan juga secara tersirat mengembalikan janji untuk nilai yang tidak ditentukan.
  • Fungsi tak segerak yang melibatkan ungkapan await mengembalikan janji untuk nilai yang dikembalikan daripada menunggu operasi.

Pengecualian:

Pengecualian kepada peraturan ini berlaku apabila janji dikembalikan secara eksplisit daripada dalam fungsi async. Dalam kes sedemikian, janji tidak dibalut semula.

Contoh:

async function increment(num) {
  return new Promise(resolve => resolve(num + 1));
}

increment(3).then(num => console.log(num)); // Logs 4

Kesimpulan:

Sementara tingkah laku ini mungkin menyimpang daripada kenyataan pemulangan JavaScript tradisional, ia sejajar dengan konsep penjana dalam ES6, yang tidak mengembalikan nilai yang tepat sebagai penyata pulangan.

Atas ialah kandungan terperinci Adakah Fungsi Async Sentiasa Mengembalikan Janji, Walaupun Tanpa Pulangan Jelas?. 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