tetiklenir sonra bir şeyler yapın. Katman üzerinde, tabakanın features
yüklemesi tamamlandığında ateşlenen bir olay var. Bu süreç asenkrondir.Promise.all() - Birden fazla olay dinleyicileri bir <code>layer</code> nesnesi uygulamak bir kartografik API kullanıyorum
Her haritanın katmanlarının özellikleri yüklendiğinde anı işlemek için Promise kullanmak istiyorum. Ancak bazen katmanın özelliklerini önceden dinleyiciye eklemeden ve bazen de yüklemeden önce yüklenir.
aşağıda gibi Promise.all()
kullanmaya çalışıyorum, ancak onun iyi yolu yapmak ne çalışıyorum elde etmek olmadığından emin değilim.
var layers = [layer1, layer2, layer3];
var promises = [];
Promise.all(promises).then(function() {
//here am I sure that all layers features are loaded?
doSomething();
});
layers.forEach(function(layer) {
if (layer.features.length > 0) {
//features are already loaded
onFeaturesLoaded();
} else {
//features not loaded yet, a one time event listener is added
layer.addOneTimeEventListener(layer.EVENTS.FEATURES_LOADED, onFeaturesLoaded, layer);
}
});
function onFeaturesLoaded() {
return new Promise(function(resolve) {
resolve();
});
};
Bana iyi görünüyor. Birçok kez böyle bir kod yazdım ve hiç bir sorunum olmadı. Dikkat edilmesi gereken tek şey (ve eğer bir API sorununuzu çözmemek için API'nızı bilmiyorum) bir şey ters giderse ne olur? Sözü reddedebileceğiniz bir hata olayı var mı? Şu anda "FEATURES_LOADED" bir sebepten ötürü kovulmadığı takdirde kodunuz asılacaktır. Kullanıcıyı bir hata hakkında uyarmanın hiçbir yolu yoktur. Ama belki de bu kodunuzun başka bir yerinde ele alınır. Sadece dikkat edilmesi gereken bir şey. – dman2306
Aslında ben, 'Promise.all' dediğiniz anda vaatler dizisi boş, yalan söyledim. Etkinlik işleyicinizde “yeni Promise” yapmak yerine, önceden vaatlerinizi yaratmanız, diziden doğru sözü vermeniz gerekecektir. Şu anda bunun hemen geri döneceğinden şüpheleniyorum. Konseptiniz gayet iyi, sadece sözleri beklediğinizden emin olmak için rafine edilmesi gerekiyor. – dman2306