Rumah > hujung hadapan web > tutorial js > Adakah Fungsi Async Sentiasa Membalas Janji?

Adakah Fungsi Async Sentiasa Membalas Janji?

Mary-Kate Olsen
Lepaskan: 2024-12-25 02:09:12
asal
812 orang telah melayarinya

Do Async Functions Always Return Promises?

Soalan: Adakah Fungsi Async Secara Tersirat Mengembalikan Janji?

Dalam JavaScript, fungsi async diisytiharkan menggunakan kata kunci async dan sering dianggap secara automatik balas janji. Walau bagaimanapun, ini menimbulkan kemungkinan ketidakkonsistenan: apabila nilai bukan janji dipulangkan secara eksplisit, fungsi itu kelihatan membungkus nilai dalam janji.

Jawapan: Semua Fungsi Async Mengembalikan Janji

Tingkah laku yang diperhatikan adalah betul: semua fungsi async secara tersirat mengembalikan janji. Khususnya:

  • Apabila fungsi async kembali tanpa pernyataan pulangan yang jelas, ia mengembalikan janji yang diselesaikan kepada tidak ditentukan.
  • Apabila fungsi async secara eksplisit mengembalikan nilai bukan janji, ia membalut nilai dalam janji diselesaikan kepada nilai itu.
  • Walaupun apabila fungsi async mengandungi ungkapan tunggu, nilai yang dikembalikan masih merupakan janji, membungkus hasil ungkapan menunggu.
  • Jika ralat dilemparkan ke dalam fungsi asinkron, janji yang dikembalikan akan ditolak dengan ralat itu.

Contoh:

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

// Logs 4, as the returned promise resolves to 4.
increment(3).then(num => console.log(num));
Salin selepas log masuk

Membalut Gelagat:

Tingkah laku membalut ini unik untuk fungsi penjana. Sebagai contoh, fungsi penjana juga mengembalikan janji, tetapi dengan cara yang berbeza:

function* foo() {
  return 'test';
}

// Logs an object, not "test".
console.log(foo());

// Logs 'test' by explicitly calling .next() on the generator function.
console.log(foo().next().value);
Salin selepas log masuk

Atas ialah kandungan terperinci Adakah Fungsi Async Sentiasa Membalas Janji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan