Kod anda melibatkan fungsi tak segerak menggunakan promise, tetapi apabila anda cuba mengakses token di dalam promise, anda akan menghadapi "Janji {
Janji mewakili operasi yang mungkin mengambil masa untuk disiapkan, dan ia menyediakan cara untuk mengendalikan hasil operasi sama ada apabila ia diselesaikan (selesai dengan jayanya ) atau menolak (kegagalan). Pada mulanya, janji berada dalam keadaan belum selesai sehingga operasinya selesai.
Dalam kod anda, anda mengembalikan janji daripada google.login. Apabila anda cuba mengakses token dengan segera, janji itu masih belum selesai; ia masih belum selesai. Ini bermakna anda akan menerima keadaan belum selesai sebagai Promise {
Untuk mendapatkan nilai janji yang diselesaikan, anda perlu menggunakan kaedah .then atau .catchnya. Kaedah ini menyediakan pengendali yang akan melaksanakan apabila janji sama ada menyelesaikan atau menolak, masing-masing. Dengan merantai pengendali .then, anda boleh melakukan tindakan berdasarkan nilai janji yang telah diselesaikan.
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" })
Dalam contoh ini, kami menambah pengendali .then pada janji yang dikembalikan oleh AuthUser. Pengendali akan melaksanakan apabila janji diselesaikan dan akan menerima nilai yang diselesaikan sebagai parameter. Kenyataan console.log di dalam .then kemudiannya akan mencetak token pengguna sebenar.
Janji menawarkan cara berstruktur untuk mengendalikan operasi tak segerak. Untuk mengakses nilai janji yang diselesaikan, anda perlu merantainya dengan pengendali .then atau .catch. Hanya selepas janji diselesaikan, nilai yang diselesaikan akan tersedia untuk kod anda.
Atas ialah kandungan terperinci Mengapa Janji Asynchronous Pada Mulanya Menunjukkan Keadaan Tertunda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!