Pendapatan Nilai Tak Segerak dalam JavaScript dengan jQuery
Dalam JavaScript, mengurus kod tak segerak boleh mencabar, terutamanya apabila cuba mendapatkan semula dan menetapkan nilai pulangan . Pertimbangkan fungsi jQuery berikut:
<code class="javascript">function trackPage(){ var elqTracker = new jQuery.elq(459); elqTracker.pageTrack({ success: function() { elqTracker.getGUID(function(guid) { alert(guid); var returnValue = guid; }); } }); return returnValue; } var someGuid = trackPage();</code>
Sementara fungsi alert() memaparkan nilai GUID dengan betul, memberikannya kepada pembolehubah, someGuid, menghasilkan nilai yang tidak ditentukan. Ini disebabkan oleh sifat tak segerak kaedah getGUID() jQuery.
Sifat Panggilan Asynchronous
Panggilan tak segerak, seperti dalam contoh, laksanakan secara bebas daripada aliran program utama. Apabila kaedah getGUID() dipanggil, ia dilaksanakan serta-merta dan kembali sebelum keputusannya tersedia. Akibatnya, pembolehubah returnValue ditetapkan tidak ditentukan.
Penyelesaian Alternatif
Untuk menangani isu ini, beberapa pendekatan boleh digunakan:
1. Fungsi Panggilan Balik
Fungsi panggil balik, seperti yang dicadangkan oleh dfsq, menyediakan mekanisme untuk menghantar fungsi yang akan menerima hasil panggilan tak segerak. Walau bagaimanapun, pendekatan ini boleh menjadi berbelit apabila berbilang fungsi panggil balik bersarang diperlukan.
2. jQuery $.Deferred
objek $.Deferred jQuery membenarkan logik tak segerak tersuai untuk mengembalikan janji. Janji membolehkan panggilan balik dilampirkan pada hasil panggilan tak segerak tanpa memerlukan sarang dalam. Kod yang dikemas kini di bawah menunjukkan pendekatan ini:
<code class="javascript">function trackPage(){ var elqTracker = new jQuery.elq( 459 ), dfd = $.Deferred(); elqTracker.pageTrack({ success: function() { elqTracker.getGUID(function( guid ) { dfd.resolve( guid ); }); } }); return dfd.promise(); } // example use: trackPage().done(function( guid ) { alert( "Got GUID:" + guid ); });</code>
Melampirkan panggilan balik pada janji memberikan lebih fleksibiliti dan membolehkan kod yang lebih teratur. Dengan mengembalikan janji, kod lain juga boleh menggunakan dan menunggu keputusan panggilan tak segerak.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai Asynchronous dalam JavaScript dengan jQuery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!