Masalah:
Dalam kod yang disediakan:
let AuthUser = data => { return google.login(data.username, data.password).then(token => { return token } ) }
Apabila melaksanakan perkara berikut:
let userToken = AuthUser(data) console.log(userToken)
Keluaran ialah:
Promise { <pending> }
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" })
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!