... Düz İngilizce bir geri arama işlevi "geri çağıran" şçi gibidir Görevini tamamladığında müdürü.
Arama işlevinden bazı bağlamları alarak başka bir işlevden bir işlevi çağırmaktan nasıl farklıdırlar? Başka bir işlevin bir işlevini çağırdığınız doğrudur, ancak anahtar, geriçağırımın bir Nesne gibi ele alındığıdır, bu nedenle sistemin durumuna göre çağrılacak İşlevi (Strateji Tasarım Kalıbı gibi) değiştirebilirsiniz. .
Yetenekleri acemi bir programcıya nasıl açıklanabilir? Geri aramaların gücü, sunucudan veri çekmesi gereken AJAX stili web sitelerinde kolayca görülebilir. Yeni verileri indirmek biraz zaman alabilir. Geri aramalar olmadan, yeni veriyi indirirken Kullanıcı Arayüzünüzün tamamı "donacak" ya da sadece bir parçası yerine tüm sayfayı yenilemeniz gerekecek. Geri arama ile, "şimdi yükleme" görüntüsünü ekleyebilir ve yüklendikten sonra yeni verilerle değiştirebilirsiniz.
bir geri olmayan bazı kod:
function grabAndFreeze() {
showNowLoading(true);
var jsondata = getData('http://yourserver.com/data/messages.json');
/* User Interface 'freezes' while getting data */
processData(jsondata);
showNowLoading(false);
do_other_stuff(); // not called until data fully downloaded
}
function processData(jsondata) { // do something with the data
var count = jsondata.results ? jsondata.results.length : 0;
$('#counter_messages').text(['Fetched', count, 'new items'].join(' '));
$('#results_messages').html(jsondata.results || '(no new messages)');
}
**With Callback:**
Here is an example with a callback, using jQuery's getJSON:
function processDataCB(jsondata) { // callback: update UI with results
showNowLoading(false);
var count = jsondata.results ? jsondata.results.length : 0;
$('#counter_messages').text(['Fetched', count, 'new items'].join(' '));
$('#results_messages').html(jsondata.results || '(no new messages)');
}
` `function grabAndGo() { // and don't freeze
showNowLoading(true);
$('#results_messages').html(now_loading_image);
$.getJSON("http://yourserver.com/data/messages.json", processDataCB);
/* Call processDataCB when data is downloaded, no frozen User Interface!
do_other_stuff(); // called immediately
Bu iyi bir örneği, aşağıdaki eklemek istiyorum olan: Bir geri arama yöntemi, herhangi bir sınıf herhangi bir yöntem olabilir; sınıfın bir örneğine yapılan bir referans, başka bir sınıfta korunur ve bazı olay başka bir sınıfta gerçekleştiğinde, yöntemi birinci sınıftan çağırır. Başka herhangi bir yöntem çağrısından ayırt edildiği gibi bir geri çağırma yapan tek şey, bir nesneye, daha sonra, genellikle bir olayda, daha sonra, bir yönteme başvurmak amacıyla bir nesneye bir başvuru gönderme fikridir. – arcy
Üzgünüz, ben java'da yeniyim. Bu anonim bir sınıf olmadan yapılabilir mi? Geri arama arayüzü olmak zorunda mı? Bu Geri Arama arayüzünü kullanmadan yapmanın bir yolu varsa, Geri Arama arayüzünü kullanmayan farklı bir örnek sağlayabilir misiniz? –
@ImtiazAhmad Hayır, anonim sınıf örneği daha kısa yapmaktır. Bir "public class MyCallbackImpl Impres 'Callback" yaratabilirsiniz. –