Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mendapatkan Nilai daripada Fungsi Panggilan Balik Asynchronous dalam JavaScript?

Bagaimana untuk Mendapatkan Nilai daripada Fungsi Panggilan Balik Asynchronous dalam JavaScript?

Barbara Streisand
Barbara Streisandasal
2024-12-26 10:48:11438semak imbas

How to Retrieve Values from Asynchronous Callback Functions in JavaScript?

Tidak Dapat Mendapatkan Nilai daripada Fungsi Panggilan Balik Asynchronous

Isu yang biasa dihadapi ini mempunyai banyak urutan pada Stack Overflow. Walaupun carian yang meluas, sesetengah pembangun masih menghadapi kesukaran untuk mengakses nilai daripada panggilan balik.

Cabaran utama terletak pada fakta bahawa kaedah segerak tidak boleh mengembalikan nilai daripada panggilan tak segerak. Seperti yang digambarkan dalam contoh yang disediakan:

function foo(address){

  // google map stuff
  geocoder.geocode( { 'address': address}, function(results, status) {
      results[0].geometry.location; // I want to return this value
  })

}
foo(); //result should be results[0].geometry.location; value

Percubaan untuk mengembalikan nilai yang diingini secara langsung akan menghasilkan respons "tidak ditentukan". Selepas itu, pengubahsuaian telah dicadangkan tetapi tidak berjaya.

Contoh percubaan sedemikian:

function foo(address){
  var returnvalue;    
  geocoder.geocode( { 'address': address}, function(results, status) {
      returnvalue = results[0].geometry.location; 
  })
  return returnvalue; 
}
foo(); //still undefined

Resolusi

Penyelesaian memerlukan lulus panggilan balik kepada fungsi foo, yang kemudiannya akan menerima pulangan nilai:

function foo(address, fn){
  geocoder.geocode( { 'address': address}, function(results, status) {
     fn(results[0].geometry.location); 
  });
}

foo("address", function(location){
  alert(location); // this is where you get the return value
});

Fungsi Tak segerak dan Struktur Panggilan Balik:

Panggilan fungsi dalaman tak segerak memerlukan penggunaan fungsi pembungkusan tak segerak yang sama untuk mendapatkan respons.

Perpustakaan dan Alternatif Pendekatan:

Mengendalikan banyak panggilan balik boleh dipermudahkan melalui penggunaan pustaka janji seperti Q. Rangka kerja ini menyediakan cara yang mudah untuk mengurus operasi tak segerak dan mengakses keputusannya dengan cara yang lebih cekap dan berstruktur.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai daripada Fungsi Panggilan Balik Asynchronous dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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