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

标签 javascript jquery angularjs asynchronous promise

我们有一个相当复杂的 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 没有通过浏览器,而是在系统的某个地方被捕获并“被忽略”。

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

关于javascript - 如何找到等待 promise 的 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824630/

相关文章:

javascript - 使用 jQuery 取消选中单选按钮时出现问题

javascript - 如何使用 jQuery 将文本添加到特定的 div 元素?

javascript - 我如何知道按钮是否已被单击?

javascript - chrome 上的 getCurrentPosition 破坏了 javascript

javascript - Angularjs 指令在 textarea 插入符号处插入文本

javascript - 如何在 Angular 中使用表单名称来获取输入数据?

javascript - AngularJS:同步从javascript调用 Angular Controller 中的方法

javascript - 我如何确定一个字符串是否包含 node.js 中的 XML?

javascript - jQuery 悬停问题 - 最后一个 li 元素保持悬停

php - 我如何从网络上获取 YouTube 视频 ID?