Rumah >hujung hadapan web >tutorial js >Mengapa Fungsi Asynchronous Mengembalikan Janji Tertunda Daripada Nilai Segera?

Mengapa Fungsi Asynchronous Mengembalikan Janji Tertunda Daripada Nilai Segera?

DDD
DDDasal
2024-12-13 19:20:11284semak imbas

Why Do Asynchronous Functions Return Pending Promises Instead of Immediate Values?

Mengapakah fungsi tak segerak mengembalikan Promise dengan status belum selesai dan bukannya nilai?

Kod mentakrifkan fungsi tak segerak, AuthUser, yang menggunakan google.login() dan mengembalikan janji yang dihasilkannya. Apabila fungsi itu digunakan, janji dilog dengan status belum selesai kerana keputusannya masih belum diselesaikan.

Penyelesaian:

Untuk mengakses nilai janji yang diselesaikan, ia mesti dirantai dengan .then() walaupun ia masih belum selesai. Contohnya:

AuthUser(data)
  .then((token) => {
    console.log(token); // "Some User token"
  });

Butiran:

Janji ialah operasi sehala. Setelah diselesaikan, nilainya dihantar ke kaedah .then() atau .catch() tanpa mengira keadaannya (diselesaikan atau belum selesai). Nilai pulangan .then() ialah nilai janji yang diselesaikan.

Dalam kod yang disediakan, AuthUser mengembalikan janji secara langsung, menjadikan nilai penyelesaiannya tidak tersedia sehingga .then() digunakan.

Wawasan Tambahan:

  • Janji/A spec menyatakan bahawa jika pengendali .then() mengembalikan nilai, janji diselesaikan dengan nilai tersebut. Jika ia mengembalikan janji lain, janji asal diselesaikan dengan nilai janji berantai yang diselesaikan.
  • Pengendali .then() berantai akan sentiasa mengandungi nilai janji berantai yang telah diselesaikan yang dikembalikan dalam .then() sebelumnya.
  • Jika pengendali .then() mengembalikan janji, nilai yang diselesaikan janji berantai itu diserahkan kepada yang berikut .then().

Atas ialah kandungan terperinci Mengapa Fungsi Asynchronous Mengembalikan Janji Tertunda Daripada Nilai Segera?. 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