Cara Mengendalikan Fungsi Panggilan Balik Tak Segerak dalam JavaScript
Fungsi panggil balik tak segerak menimbulkan cabaran apabila mendapatkan semula nilai dari dalam kaedah segerak. Pertimbangkan coretan kod berikut, yang cuba mendapatkan nilai lokasi daripada fungsi panggil balik:
function foo(address) { 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
Walau bagaimanapun, cubaan memulangkan nilai secara terus menghasilkan "tidak ditentukan". Percubaan seterusnya menggunakan pembolehubah perantaraan atau hantaran panggil balik juga telah gagal.
Penyelesaian: Hantaran Balik
Mengembalikan nilai daripada fungsi panggil balik tak segerak dalam kaedah segerak adalah mustahil. Sebaliknya, panggilan balik mesti dihantar ke fungsi tak segerak untuk menerima nilai pulangan.
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 });
Dalam kod yang disemak ini, fungsi foo menerima panggilan balik fn untuk mengendalikan nilai pulangan. Fungsi tak segerak geocoder.geocode kemudian menghantar nilai lokasi kepada fn sebagai hujah. Fungsi panggil balik kemudiannya boleh menggunakan nilai lokasi seperti yang diperlukan.
Pertimbangan Pengaturcaraan Asynchronous
Ingat bahawa apabila panggilan fungsi dalaman adalah tak segerak, semua fungsi yang disertakan juga mestilah tidak segerak untuk membalas respons. Jika bekerja dengan banyak panggilan balik, pertimbangkan untuk menggunakan pustaka janji seperti Q untuk memudahkan proses.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai daripada Fungsi Panggilan Balik Asynchronous dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!