Fungsi Async: Pemulangan Janji Tersirat atau Kawalan Eksplisit?
Fungsi Async dalam JavaScript, dilambangkan dengan kata kunci async, sering dikatakan secara tersirat balas janji. Walau bagaimanapun, pemeriksaan lebih dekat mendedahkan bahawa realitinya lebih bernuansa.
Secara lalai, fungsi async memang akan mengembalikan janji jika janji tidak dikembalikan secara eksplisit. Ini bermakna kod berikut:
async function getVal() { const result = await doSomethingAsync(); return result; }
sama dengan:
async function getVal() { const result = await doSomethingAsync(); return Promise.resolve(result); }
Walau bagaimanapun, jika anda secara eksplisit memulangkan nilai bukan janji, fungsi akan membungkusnya secara automatik dalam janji . Sebagai contoh, dalam contoh berikut:
async function getVal() { return doSomethingNonAsync(); }
getVal sebenarnya akan mengembalikan objek Promise yang mengandungi hasil doSomethingNonAsync().
Perlu diperhatikan bahawa tingkah laku ini berbeza daripada fungsi JavaScript tradisional. Apabila anda secara eksplisit mengembalikan nilai primitif daripada fungsi biasa, ia segera dikembalikan. Fungsi Async, bagaimanapun, sentiasa mengembalikan janji, membalut nilai bukan janji seperti yang diperlukan.
Ini mungkin kelihatan tidak konsisten, tetapi ia bercantum dengan konsep penjana dalam ES6. Penjana ialah fungsi yang tidak mengembalikan nilai yang sama seperti penyata pulangannya. Sebaliknya, ia menghasilkan satu siri nilai, yang boleh diulang menggunakan operator hasil.
Contohnya:
function* getVal() { yield doSomethingAsync(); return 'finished'; } // Logs an object. console.log(getVal()); // Logs 'yikes' and then 'finished'. for (const val of getVal()) { console.log(val); }
Atas ialah kandungan terperinci Fungsi Async dalam JavaScript: Janji Tersirat atau Nilai Pulangan Eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!