Saya menghadapi soalan temu bual hari ini, iaitu, jika terdapat dua operasi ajax tak segerak pada halaman, kerana susunan pelaksanaan kedua-dua operasi tak segerak ini tidak pasti, bagaimana saya boleh melaksanakan operasi baharu selepas kedua-dua operasi dilaksanakan adakah kaedahnya?
Saya menjawab kaedah satu pada masa itu: sarang dua ajax dan lakukan operasi baharu dalam fungsi pemulangan ajax kedua. Jawapan penemuduga: Kaedah ini terlalu pincang.
Jadi saya fikirkan tentang jawapan kedua: pantau pembolehubah setempat melalui set pemasaMasa habis, dan pastikan kedua-dua operasi tak segerak selesai sebelum melakukan operasi baharu. Jawapan penemuduga: Prestasi kaedah ini tidak bagus. Bolehkah anda memikirkan kaedah yang mudah dan lebih munasabah?
Saya tidak memikirkannya pada masa itu
Jadi saya mengemukakan soalan ini untuk mengetahui cara terbaik? Selamat berbincang dan memberi nasihat
1. Promise membalut operasi ajax asynchronous,
2. Tentukan fungsi async,
3 Gunakan menunggu untuk pemerolehan asynchronous data untuk diselesaikan anda di bawah. Saya terlalu malas untuk menggunakannya Selepas ajax memperoleh data, gunakan fungsi settimeout untuk mensimulasikan mendapatkan data.
http://api.jquery.com/jQuery....
Kaedah asli luar biasa semasa dalam persekitaran penyemak imbas ialah Promise.all.
Ambil memanggil pustaka peta saya Sinomap Demo sebagai contoh Untuk memuatkan peta pada halaman ini, berbilang permintaan diperlukan untuk dimulakan pada masa yang sama tetapi pesanan pemulangan tidak boleh dijamin:
.Data rupa bumi China
Data JSON setiap wilayah
Apabila berbilang carta ditindih, terdapat berbilang data JSON dalam berbilang carta yang perlu dikembalikan melalui antara muka data yang berbeza...
Penyelesaian terus dalam
http://sinomap.ewind.us/demo/demo.js
yang tidak dibungkus, contoh:Dengan cara ini, Promise bukan sahaja merealisasikan penyahgandingan logik panggil balik, tetapi juga merealisasikan kawalan proses tak segerak asas.
Saya baru melihat kaedah jquery, jadi saya menulis semula satu untuk anda. Ia mungkin tidak sebaik jquery, tetapi sekurang-kurangnya ia boleh mencapai kesannya. Anda boleh terus memasukkan kod berikut dalam konsol pergi dan tulis Saya mengambil masa setengah jam. .
Tanya sama ada saya boleh menggunakan jQ Jika ya, katakan sahaja:
By the way, berikut adalah rujukan dokumentasi $.when
Saya rasa ini kaedah Promise semua atau sesuatu
Soalan anda ada tiga perkara a, b, c. c hendaklah dilaksanakan selepas a dan b selesai.
Terdapat banyak kaedah: seperti kaedah bersarang yang anda nyatakan, dan kaedah pemantauan ganas
Saya pernah memikirkan soalan ini sebelum ini, dan inilah jawapan saya.
Pemancar tak segerak
Cara melakukan operasi tak segerak menggunakan storan tatasusunan
Perhatikan bahawa semua fungsi di dalam mempunyai parameter commit , iaitu fungsi yang digunakan untuk mengembalikan nilai. Apabila ajax berjaya, hantarkan nilai pulangan semula ke dalam
Menulis pelancar
Pemproses adalah data seperti todos. cb ialah panggilan balik terakhir.
Serentak mereka
Laksanakan pemancar tak segerak dan sediakan
最终回调
Pautan
https://eczn.coding.me/blog/%...
Anda boleh mentakrifkan pembolehubah a=0, dan tetapkan a++ dalam panggilan balik selepas permintaan ajax berjaya
Kemudian nilai a==2 dalam kedua-dua panggilan balik dan laksanakan fungsi operasi
Tetapkan dua bendera, dan kemudian dua ajax memanggil panggilan balik yang sama Dalam panggilan balik ini, ia dinilai bahawa kedua-dua bendera adalah benar sebelum operasi berikutnya dilakukan.
Tulis ajax dalam ajax lain dan laksanakannya dalam panggilan balik