我可以从广播活动中解决承诺吗?



我们正在使用Angular Legacy(1.5)我正在尝试使用第三方库加载一些层。我需要等到它们继续加载才能继续。因此,在我的获取数据部分中,它调用库并要求它添加数据,我在本节中启动$ q.defer,然后将其分配给出厂级变量。在第三方LIB的服务中,我设置了一个请求的计数,并在匹配$广播和活动时,请要求我完成其完整。然后,我聆听($ 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;
}

这不是在等待解决的承诺,而是进入"然后"语句并处理下一个功能'过早'我需要等到第一个函数完成。

有什么想法?

好吧,我找不到做这项工作的方法,所以我所做的就是设置一个工厂级别变量(布尔值),以指示何时开始加载,这是然后将事件上的$触发时设置为false。在我的getlayerdata方法中,我设置了一个内部以每500毫秒运行,在此间隔函数中,我在加载变量(如果false(即加载))中运行检查,然后返回deferred.resolve()并取消间隔。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>

相关内容

  • 没有找到相关文章

最新更新