使新的stacktrace.js库同步

时间:2016-06-05 20:02:45

标签: javascript promise stacktrace.js

我正在使用新的stacktracejs libary并返回一个promise。

StackTrace.get() // this results in a promise

我能做些什么让它同步吗?

像这样:

var result = magicalSomething(StackTrace.get());

3 个答案:

答案 0 :(得分:5)

更新:现在有一个.getSync()的堆栈跟踪,它提供了部分信息,但您可以使用它。

StackTrace.js由making calls工作到堆栈跟踪中涉及的脚本文件,并为它们提取其他信息。这意味着您无法获得自a part is already asynchronous以来生成的堆栈跟踪。

从技术上讲,这实际上是可以解决的,并且可以同步(以冻结页面数十秒为代价) - 但这似乎不是图书馆的设计目标。

相反,使用库提供的内容并使用给定的承诺:

StackTrace.get().then(function(result) {
   // I got result here
});

答案 1 :(得分:1)

更新:本杰明的答案更为正确。从stacktrace.js v1.3.0

开始使用此功能
var stacktrace = StackTrace.getSync();

如果您需要同步行为并且不关心猜测匿名函数或源映射支持或旧IE,您可以使用堆栈解析lib作为stacktrace.js的基础 - error-stack-parser这样:

function stacktrace() {
  try {
    throw new Error();
  } catch (e) {
    return ErrorStackParser.parse(e);
  }
}

答案 2 :(得分:0)

只是想提一下,也可以使用stacktrace-js库同步获取源映射堆栈跟踪。

它不是API的一部分,但可以进行一些修改。

见这里:https://github.com/stacktracejs/stacktrace.js/issues/188