Rumah > hujung hadapan web > tutorial js > Mengapa Janji Asynchronous Pada Mulanya Menunjukkan Keadaan Tertunda?

Mengapa Janji Asynchronous Pada Mulanya Menunjukkan Keadaan Tertunda?

Linda Hamilton
Lepaskan: 2024-12-12 11:11:09
asal
527 orang telah melayarinya

Why Do Asynchronous Promises Initially Show a Pending State?

Mengapa Asynchronous Promises Tunjukkan Keadaan Belum Selesai Pada Mulanya

Kod anda melibatkan fungsi tak segerak menggunakan promise, tetapi apabila anda cuba mengakses token di dalam promise, anda akan menghadapi "Janji { }" bukannya diselesaikan token.

Resolusi Janji dan Keadaan Belum Selesai

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.

Janji Merangkai: Resolusi Tertunda

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 { }.

Merakam Keputusan Janji

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.

Contoh: Menangkap Nilai Janji

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

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.

Kesimpulan

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!

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