Menyahsulit Janji bahagian hadapan: Cara mengendalikan operasi tak segerak dengan anggun
Pengenalan:
Dalam pembangunan bahagian hadapan, kami sering menghadapi situasi yang memerlukan operasi tak segerak, seperti mendapatkan data daripada pelayan, menghantar permintaan HTTP, memproses pengguna input, dsb. Dalam JavaScript, operasi tak segerak ini boleh dikendalikan dengan elegan menggunakan objek Promise. Artikel ini akan memberikan analisis mendalam tentang cara Promise berfungsi dan cara menggunakan Promise untuk mencapai kod tak segerak yang lebih jelas dan boleh dibaca.
1. Apa itu Janji?
Promise ialah corak reka bentuk dan mekanisme pelaksanaan yang diperkenalkan dalam ES6 untuk mengurus operasi tak segerak. Ia boleh merangkum operasi tak segerak ke dalam objek dan mengatur serta mengurus operasi ini dalam cara panggilan berantai, menjadikan kod lebih mudah difahami dan diselenggara. Janji mempunyai tiga keadaan: tertunda, dipenuhi, dan ditolak.
2. Penggunaan asas Promise
- Mencipta objek Promise
Pertama, kita boleh mencipta objek Promise melalui pembina Promise. Pembina menerima fungsi sebagai parameter, yang akan dilaksanakan serta-merta, dan menerima dua fungsi sebagai parameter, iaitu menyelesaikan dan menolak. Fungsi menyelesaikan digunakan untuk menukar objek Promise daripada keadaan menunggu kepada keadaan siap, dan fungsi tolak menukar objek Promise daripada keadaan menunggu kepada keadaan penolakan.
const promise = new Promise((resolve, reject) => {
// 异步操作
// 操作成功时调用resolve
// 操作失败时调用reject
})
Salin selepas log masuk
- Janji Berantai
Janji menyediakan kaedah kemudian untuk panggilan berantai. Kaedah kemudian menerima dua parameter, iaitu fungsi panggil balik kejayaan dan fungsi panggil balik kegagalan. Jika operasi tak segerak berjaya, iaitu fungsi menyelesaikan dipanggil, fungsi panggil balik kejayaan akan dilaksanakan jika operasi tak segerak gagal, iaitu fungsi tolak dipanggil, fungsi panggil balik kegagalan akan dilaksanakan;
promise.then(
function(data) {
// 异步操作成功时执行的代码
},
function(error) {
// 异步操作失败时执行的代码
}
)
Salin selepas log masuk
- Promise chain call
Promise menyediakan ciri yang sangat penting, iaitu berbilang operasi tak segerak boleh diatur dan diuruskan melalui panggilan berantai. Selepas mengembalikan tika Promise baharu dalam kaedah kemudian, anda boleh terus memanggil kaedah kemudian pada tika Promise, dan seterusnya.
promise.then(
function(data) {
// 第一个异步操作成功时执行的代码
return newPromise;
}
).then(
function(data) {
// 第二个异步操作成功时执行的代码
}
)
Salin selepas log masuk
3. Kelebihan Promise
- Meningkatkan kebolehbacaan dan kebolehselenggaraan kod
Menggunakan Promise, anda boleh memisahkan dan mengatur logik operasi tak segerak, menjadikan kod lebih jelas dan lebih mudah difahami. Gunakan kaedah kemudian untuk membuat panggilan berantai Setiap kaedah kemudian boleh mengendalikan kejayaan atau kegagalan operasi tak segerak, menjadikan logiknya lebih modular. - Selesaikan masalah neraka panggil balik
Kaedah fungsi panggil balik tradisional akan menyebabkan masalah neraka panggil balik apabila memproses berbilang operasi tak segerak, menjadikan kod sukar untuk dikekalkan dan dikembangkan. Menggunakan Promise boleh menyelesaikan masalah neraka panggil balik melalui panggilan berantai dan menyatakan dengan jelas kebergantungan antara operasi tak segerak. - Pengendalian pengecualian seragam
Promise menyediakan kaedah tangkapan untuk mengendalikan pengecualian secara seragam dalam operasi tak segerak. Dengan menambahkan kaedah tangkapan pada penghujung rantaian panggilan, pengecualian yang berlaku dalam keseluruhan rangkaian panggilan boleh ditangkap untuk memudahkan pengendalian ralat.
4. Aplikasi lanjut Promise
Selain penggunaan asas, Promise juga mempunyai beberapa teknik aplikasi lanjut untuk menjadikan kod lebih ringkas dan lebih mudah untuk dikekalkan.
- Memproses berbilang operasi tak segerak secara selari
Dalam sesetengah kes, kita perlu melakukan berbilang operasi tak segerak pada masa yang sama dan menunggu semuanya selesai sebelum melakukan operasi lain. Promise menyediakan kaedah Promise.all, yang menerima tatasusunan tika Promise sebagai parameter dan mengembalikan tika Promise baharu Apabila semua tika Promise memasuki keadaan siap, tika Promise akan memasuki keadaan siap.
const promises = [promise1, promise2, promise3];
Promise.all(promises)
.then(function(data) {
// 所有异步操作都成功完成时执行的代码
})
.catch(function(error) {
// 任何一个异步操作失败时执行的代码
});
Salin selepas log masuk
- Kendalikan operasi tak segerak yang pertama selesai
Dalam sesetengah kes, kami hanya memerlukan hasil daripada operasi tak segerak yang pertama selesai tanpa menunggu semua operasi tak segerak selesai. Promise menyediakan kaedah Promise.race, yang menerima tatasusunan tika Promise sebagai parameter dan mengembalikan tika Promise baharu Apabila mana-mana tika Promise memasuki keadaan siap, tika Promise akan memasuki keadaan siap.
const promises = [promise1, promise2, promise3];
Promise.race(promises)
.then(function(data) {
// 最快的一个异步操作完成时执行的代码
})
.catch(function(error) {
// 如果最快的一个异步操作失败时执行的代码
});
Salin selepas log masuk
Kesimpulan:
Menggunakan Promise boleh mengendalikan operasi tak segerak di bahagian hadapan dengan lebih elegan, menggalakkan kebolehbacaan dan kebolehselenggaraan kod, menyelesaikan masalah neraka panggil balik, dan menyediakan pengendalian ralat yang mudah. Pada masa yang sama, Promise juga boleh digunakan dalam senario seperti memproses berbilang operasi tak segerak secara selari dan memproses operasi tak segerak yang pertama selesai. Menguasai penggunaan Promise akan membantu meningkatkan kecekapan dan kualiti kod pembangunan bahagian hadapan.
Di atas ialah pengenalan terperinci artikel ini tentang menyahsulit Promise bahagian hadapan Saya harap ia akan membantu pembaca apabila berurusan dengan operasi tak segerak.
Atas ialah kandungan terperinci Penyahsulitan Promise Front-end: Petua untuk mengendalikan operasi tak segerak dengan elegan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!