Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到等待承诺的JavaScript代码_Javascript_Jquery_Angularjs_Asynchronous_Promise - Fatal编程技术网

如何找到等待承诺的JavaScript代码

如何找到等待承诺的JavaScript代码,javascript,jquery,angularjs,asynchronous,promise,Javascript,Jquery,Angularjs,Asynchronous,Promise,我们有一个相当复杂的JavaScript异步系统。JavaScript库中的所有函数都设计为异步函数。我们主要使用AngularJS延迟对象,有些部分使用jQuery(不过我们不会将它们混合在一起,即Angular代码等待AngularJS延迟承诺) 我们遇到的问题是,代码在启动时似乎“挂起”,5次中有2次挂起。在缓存JS代码和承诺解析的时间安排时,似乎出现了问题 当挂起发生时,似乎没有任何工具或任何东西可以指出有问题的代码在等待什么 如何找到等待承诺的JavaScript代码 谢谢。所以这个错

我们有一个相当复杂的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项目中使用它)。