我正在使用新的stacktracejs libary并返回一个promise。
StackTrace.get() // this results in a promise
我能做些什么让它同步吗?
像这样:var result = magicalSomething(StackTrace.get());
答案 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