javascript - 如何找到等待 promise 的JavaScript代码

我们在JavaScript中有一个相当复杂的异步系统。 JavaScript库中的所有函数均设计为异步的。我们主要使用AngularJS延迟对象,而某些部分使用jQuery(尽管我们不将它们混合在一起-即Angular代码等待Angular延迟的Promise)。

我们遇到的问题是,代码在启动时似乎“挂起”(5次中的2次)。缓存JS代码和Promise解决方案的时间时,似乎出现了问题。

似乎没有任何工具或任何工具可以指出发生挂起时有问题的代码正在等待什么。

您如何找到等待 promise 的JavaScript代码?

谢谢。

最佳答案

因此,错误实际上最终与 promise 无关,而是依赖项加载的时间。我们正在使用LAB.js作为文件加载器。 LAB.js支持JavaScript依赖项的“链式”加载机制。

发生的事情是,有2条我们尚未发布的链彼此相关。这两个链都是异步加载的,因此,在运行JavaScript文件时,就有机会尝试使用未加载的对象。

使问题更加复杂的是,在这种情况下Angular.js 1.2.13失败了。在加载Angular服务期间发生了异常,并且该异常从未传播到更高级别的代码,也没有任何调试说明它已击中异常:

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();
    }
  }
}

上面的 throw err没有进入浏览器,被系统中的某个地方捕获并被“忽略”。

一旦发现异常,就很容易跟踪链加载问题。