我们正在使用 angular legacy (1.5) 我正在尝试使用 3rd 方库批量加载一些图层。我需要等到它们被加载后再继续。因此,在我的获取数据部分,它调用库并要求它添加数据,我在此部分中启动 $q.defer 并将其分配给工厂级变量。在第 3 方库的服务中,我设置了请求输出和请求输入的计数,当它们匹配时,$broadcast 和事件告诉我它完成了。然后我监听 ($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;
}
这不是等待承诺解决,而是进入“then”语句并“过早”处理下一个函数,我需要它等到第一个函数完成。
有任何想法吗?