如何找到等待承诺的JavaScript代码
我们有一个相当复杂的JavaScript异步系统。JavaScript库中的所有函数都设计为异步函数。我们主要使用AngularJS延迟对象,有些部分使用jQuery(不过我们不会将它们混合在一起,即Angular代码等待AngularJS延迟承诺) 我们遇到的问题是,代码在启动时似乎“挂起”,5次中有2次挂起。在缓存JS代码和承诺解析的时间安排时,似乎出现了问题 当挂起发生时,似乎没有任何工具或任何东西可以指出有问题的代码在等待什么 如何找到等待承诺的JavaScript代码如何找到等待承诺的JavaScript代码,javascript,jquery,angularjs,asynchronous,promise,Javascript,Jquery,Angularjs,Asynchronous,Promise,我们有一个相当复杂的JavaScript异步系统。JavaScript库中的所有函数都设计为异步函数。我们主要使用AngularJS延迟对象,有些部分使用jQuery(不过我们不会将它们混合在一起,即Angular代码等待AngularJS延迟承诺) 我们遇到的问题是,代码在启动时似乎“挂起”,5次中有2次挂起。在缓存JS代码和承诺解析的时间安排时,似乎出现了问题 当挂起发生时,似乎没有任何工具或任何东西可以指出有问题的代码在等待什么 如何找到等待承诺的JavaScript代码 谢谢。所以这个错
谢谢。所以这个错误实际上与承诺无关,而是与依赖项加载的时间有关。我们使用LAB.js作为文件加载程序。js支持JavaScript依赖项的“链”加载机制 发生的事情是,有两条我们没有释放的链条彼此相关。这两个链都是异步加载的,因此,在运行JavaScript文件时,有机会尝试使用未加载的对象 使问题更加复杂的是Angular.js 1.2.13在此场景中悄然失败。Angular services加载期间发生异常,该异常从未传播到更高级别的代码,也没有任何调试可以说它遇到了异常:
function getService(serviceName) {
if (cache.hasOwnProperty(serviceName)) {
if (cache[serviceName] === INSTANTIATING) {
throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- '));
}
return cache[serviceName];
} else {
try {
path.unshift(serviceName);
cache[serviceName] = INSTANTIATING;
return cache[serviceName] = factory(serviceName);
} catch (err) {
if (cache[serviceName] === INSTANTIATING) {
delete cache[serviceName];
}
throw err;
} finally {
path.shift();
}
}
}
函数getService(serviceName){
if(cache.hasOwnProperty(serviceName)){
if(缓存[serviceName]==实例化){
抛出$InjectorMiner('cdep',找到循环依赖项:{0}',path.join('删除这个:它仍然是WIP,但应该是可用的。也就是说,你也可以调试库代码。@FlorianMargaine这个扩展是针对Amber的,而OP是针对AngularJS和jQuery实现的。我缺少什么吗?@EliranMalka它是针对promises的。它是由Ember的开发人员完成的,但对promises来说是通用的@FlorianMargaine(你也可以调试库代码)-我目前的问题是,我不知道如何调试,也不知道任何可以帮助我的工具。除了将控制台调试放在任何地方,这都会影响计时。Ember应用程序说:“这不是Ember应用程序。”@FlorianMargaine,我说得太快了-使用该扩展不可能调试任何东西,除非它是一个琥珀色的项目,所以它不是很有帮助(令我沮丧的是,我很想在我的Angular项目中使用它)。