Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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 如何在Zone.js中打印当前区域的路径_Javascript_Angular_Zone.js - Fatal编程技术网

Javascript 如何在Zone.js中打印当前区域的路径

Javascript 如何在Zone.js中打印当前区域的路径,javascript,angular,zone.js,Javascript,Angular,Zone.js,我正在试验zones(),我意识到我不知道从根目录到当前抛出错误的区域打印所有区域的最佳方式是什么 例如,此代码使用两个嵌套回调函数setTimeout(),然后调用名为failedFunc()的函数,该函数会引发错误: require('zone.js'); function failedFunc() { throw new Error("it's broken"); } let rootZone = Zone.current; function func1() { let zo

我正在试验zones(),我意识到我不知道从根目录到当前抛出错误的区域打印所有区域的最佳方式是什么

例如,此代码使用两个嵌套回调函数
setTimeout()
,然后调用名为
failedFunc()
的函数,该函数会引发错误:

require('zone.js');

function failedFunc() {
  throw new Error("it's broken");
}

let rootZone = Zone.current;

function func1() {
  let zoneA = rootZone.fork({name: 'zoneA'});
  zoneA.run(() => {
    setTimeout(() => func2());
  });
}

function func2() {
  let zoneB = Zone.current.fork({name: 'zoneB'});

  zoneB.run(() => {
    setTimeout(() => failedFunc());
  });
}

func1();
当我运行此示例时,它给出以下输出:

/.../zone-test/node_modules/zone.js/dist/zone-node.js:170
                        throw error;
                        ^
Error: it's broken
    at new Error (native)
    at failedFunc (/.../zone-test/zone_02.js:12:9) [zoneB]
    at Timeout.setTimeout (/.../zone-test/zone_02.js:28:22) [zoneB]
    at Zone.runTask (/.../zone-test/node_modules/zone.js/dist/zone-node.js:166:47) [<root> => zoneB]
    at Timeout.ZoneTask.invoke (/.../zone-test/node_modules/zone.js/dist/zone-node.js:416:38) [<root>]
    at Timeout.data.args.(anonymous function) [as _onTimeout] (/.../zone-test/node_modules/zone.js/dist/zone-node.js:1590:25) [<root>]
    at ontimeout (timers.js:365:14) [<root>]
    at tryOnTimeout (timers.js:237:5) [<root>]
    at Timer.listOnTimeout (timers.js:207:5) [<root>]
现在,当我运行此程序时,我将获得我需要的:

[ 'zoneB', 'zoneA', '<root>' ]

/.../zone-test/node_modules/zone.js/dist/zone-node.js:170
                        throw error;
                        ^
Error: it's broken
    at new Error (native)
['zoneB','zoneA',']
/…/zone test/node_modules/zone.js/dist/zone node.js:170
投掷误差;
^
错误:它坏了
新错误时(本机)

因此,我想知道如何在实践中使用zone.js,并以一种比这更简单的方式使用它。

要获得您的
区域的完整堆栈跟踪,您必须使用

请注意,我抛出了一个异常,这就是为什么您会在我的代码段中看到一个错误。问题和答案是关于打印完整stacktrace的:

函数失败func(){
抛出新错误(“它坏了”);
}
函数func1(){
让zoneA=Zone.current.fork({
名称:“zoneA”
});
zoneA.run(函数(){
setTimeout(函数(){
func2()
});
});
}
函数func2(){
设zoneB=Zone.current.fork({
名称:“zoneB”
});
zoneB.run(函数(){
setTimeout(函数(){
failedFunc()
});
});
}
区域、当前、分叉({
onHandleError:函数(ParentZoneLegate、currentZone、targetZone、error){
console.log(error.stack);
}
}).fork(Zone.longStackTraceZoneSpec).run(func1)


!函数(t,a){“对象”==typeof exports&&“undefined”!=typeof module?a():“函数”==typeof define&&define.amd?define(a):a()}(这,函数(){“使用严格”;函数t(){返回新错误(u)}函数a(){尝试{抛出t()}捕获(a){函数e(t){返回t.stack?t.stack.split i:[]函数n(t,a){for(n=e(var),r=0;rZonejs使用ZoneName的概念来获得这样的输出..您可以编写自己版本的global.Error。因为我注意到此输出经常发生更改。检查上次提交我认为您正在寻找longStackTraceZone,我稍微更改了您的代码并创建了JSFIDLE:我找不到
长堆栈跟踪区域
,所以我只是粘贴了我HTML节中的t。
Zone.current
始终返回运行它的区域
[ 'zoneB', 'zoneA', '<root>' ]

/.../zone-test/node_modules/zone.js/dist/zone-node.js:170
                        throw error;
                        ^
Error: it's broken
    at new Error (native)