Мы используем угловое наследие (1.5) Я пытаюсь загрузить несколько слоев, используя стороннюю библиотеку. Мне нужно подождать, пока они не загрузятся, прежде чем продолжить. Итак, в разделе «Получить данные» он вызывает библиотеку и просит ее добавить данные, я запускаю $ q.defer в этом разделе и назначаю это переменной фабричного уровня. В службе для сторонней библиотеки lib, я устанавливаю счет для запросов и запросов, когда они совпадают, $ broadcast и event, чтобы рассказать мне об этом. Затем я слушаю ($ on) для этого события и задаю обещание разрешить. однако приложение не ждет этого. Я понимаю, что это странно, но что я могу сделать.Могу ли я решить обещание вещания?
Наш код очень востребован, поэтому я попытался создать грубый пример того, что мы пытаемся архивировать.
function layerFactory($rootScope, $log, $q, DataService) {
var factory = {
getData:getData,
var _dataPromise;
function getData(data){
_getLayerData(data).then(function(){
_processData(data);
});
}
function _getLayerData(data){
_dataPromise = $q.defer();
DataService.getData(data) // Treat DataService as a 3rd party lib, this doesn't return a promise. I have no way of knowing this is complete until a $broadcast is sent.
_dataPromise.promise;
}
$rootScope.$on('dataLoaded', function(){
_dataPromise = $q.resolve();
});
}
return factory;
}
Это не ждет обещание разрешить и вместо того, чтобы идти в «то» заявления и обработки следующей функции «слишком рано», мне нужно его ждать до первой функции завершенным.
Любые идеи?