Rumah > hujung hadapan web > tutorial js > Mengapa Fungsi Async Saya Mengembalikan `Janji { }` Daripada Nilai Yang Dijangkakan?

Mengapa Fungsi Async Saya Mengembalikan `Janji { }` Daripada Nilai Yang Dijangkakan?

Linda Hamilton
Lepaskan: 2024-12-09 22:03:12
asal
912 orang telah melayarinya

Why Does My Async Function Return `Promise {  }` Instead of the Expected Value?

Mengapa Fungsi Asynchronous Saya Kembali Menjanjikan { } Daripada Nilai?

Masalah:

Dalam kod yang disediakan:

let AuthUser = data => {
  return google.login(data.username, data.password).then(token => { return token } )
}
Salin selepas log masuk

Apabila melaksanakan perkara berikut:

let userToken = AuthUser(data)
console.log(userToken)
Salin selepas log masuk

Keluaran ialah:

Promise { <pending> }
Salin selepas log masuk

Penjelasan:

Janji dalam JavaScript digunakan untuk mewakili operasi tak segerak. Jika fungsi tak segerak mengembalikan janji yang masih belum diselesaikan, ia akan log sebagai "belum selesai" apabila dicetak.

Untuk menangkap hasil panggilan tak segerak, anda mesti menggunakan kaedah .then pada janji. Kaedah ini mengambil fungsi panggil balik sebagai hujah, yang akan dilaksanakan apabila janji diselesaikan.

Penyelesaian:

Untuk log token dengan betul daripada fungsi tak segerak, ubah suai kod seperti berikut:

let AuthUser = function(data) {
  return google.login(data.username, data.password).then(token => { return token } )
}

let userToken = AuthUser(data)
console.log(userToken) // Promise { <pending> }

userToken.then(function(result) {
   console.log(result) // "Some User token"
})
Salin selepas log masuk

Dengan menggunakan .then, anda boleh mengendalikan hasil janji tidak kira sama ada ia diselesaikan atau masih belum selesai.

Butiran:

Janji hanya diselesaikan sekali, dan nilai yang diselesaikan diserahkan kepada kaedah .then atau .catch. Spesifikasi Promises/A menyatakan bahawa jika fungsi dalam pengendali .then mengembalikan nilai, janji diselesaikan dengan nilai tersebut. Jika pengendali memulangkan janji lain, janji asal diselesaikan dengan nilai janji berantai yang telah diselesaikan.

Atas ialah kandungan terperinci Mengapa Fungsi Async Saya Mengembalikan `Janji { }` Daripada Nilai Yang Dijangkakan?. 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