Eşzamansız bir yöntem beklemenin aptalca olduğunu biliyorum, one should use callbacks instead. Ancak, bir üçüncü taraf API'si sizi senkronize etmeye zorlarsa ne olur?Eşzamansız bir yöntemin geri dönüş değeri nasıl beklenir?
Kullanıcının başka bir sekmede açık olan web sitelerini ziyaret etmesini engelleyen bir Chrome Uzantısı geliştiriyorum. Temel olarak açık sekmelerdeki URL'lere dayalı istekleri iptal etmem gerekiyor. Böyle chrome.webRequest.onBeforeRequest
kullanmak istiyorum:
function onBeforeRequest(details) {
var websiteAlreadyOpenInOtherTab;
// Here i want to set `websiteAlreadyOpenInOtherTab` by using the `chrome.tabs`
// API. It's asynchronous though and that's my problem. I cant return a value
// from an asynchronous method call.
if (websiteAlreadyOpenInOtherTab) {
return { cancel: true };
}
}
chrome.webRequest.onBeforeRequest.addListener(
onBeforeRequest,
{ urls: ['<all_urls>'], types: ['main_frame'] },
['blocking']);
Umarım yukarıdaki kodda ikilemimi görüyoruz. Eşzamansız yöntem çağrılarının sonucuna göre bir nesne döndürmem gerekiyor. Bunu başarmak mümkün mü?
Hayır, :-(değil – Bergi
Tüm "chrome.tabs" değişikliklerini dinleyemiyor ve 'onBeforeRequest 'çağrıldığında zaten" websiteAlreadyOpenInOtherTab "değerini doğru olarak ayarlayamıyor musunuz? – Bergi
Sorun yanlış. Öncelikle, eşzamansız olması gerekiyorsa, eşzamanlı bir yanıt gerektirmek yerine, model içinde çalışın ve sekmeye karar vermezseniz, kapatmanız gereken zaman uyumsuz bir geri çağırma kullanın. Sekmeleri kapatmak için ayrı bir API işlevi vardır, sadece ondan ön yüklemeden false döndürmeniz gerekmez ... – davin