Senkron görevler genellikle kötü. Eşzamansız bir şekilde yapmanın gerçek bir nedeni yoksa, olay geri bildirimini kullanmanızı kesinlikle öneririz.
Dosyanızın bozuk olduğunu ve HTML5 API'sının okunamadığını düşünün, size sonuç vermeyecektir. Kodunuzu kırıp siteyi engellerdi. Ya da birisi, dosya tamamen yüklenene kadar HTML sayfanızı donduran 10GB'lık bir dosya seçebilir. Bu eşzamansız olay işleyicisi ile olası hataları yakalayabilirsiniz.
var ready = false;
var result = '';
var check = function() {
if (ready === true) {
// do what you want with the result variable
return;
}
setTimeout(check, 1000);
}
check();
var reader = new FileReader();
reader.onloadend = function(evt) {
// file is loaded
result = evt.target.result;
ready = true;
};
reader.readAsDataURL(file);
kontrol fonksiyonu, çekler hazır bayrak değişkeni true olarak ayarlanırsa, her saniye:
geri aramaları ile sınırlamaları geçici olarak çözmek için, ben basit bir hile kullanır. Eğer öyleyse, sonucun mevcut olduğundan emin olabilirsiniz.
Bunu yapmak en iyi uygulama olmayabilir, ancak aynı anda 10 setTimeouts ile 30 kez bu tekniği kullanarak bir webapp yaptım ve şu ana kadar hiç sorun yaşamadım.
* "Senkronize bir yöntem istiyorum." * Herhangi bir sebep neden? Bunun mümkün olduğunu düşünmüyorum. –
firefox, file.getAsDataURL() yöntemine sahip/sahipti, ancak kullanımdan kaldırıldı ve herhangi bir tarayıcının, afaik'in tek senkronizasyon sürümüdür. – dandavis
Yolları bir yerel depolama veritabanında saklıyorum, görüntüleri daha sonra bir sunucuya göndermem gerekiyor (tüm resimlerde bir döngü ile, bu yüzden senkronize bir yönteme ihtiyacım var). Yerel depolama limitini aşmamak için veritabanında base64 dizelerini saklamaktan kaçınmak istiyorum ... – Laila