(蓝鸟)中的咕噜声无声错误?

我有一个以main()函数为起点的npm模块。

现在,让我们说我在这个main()抛出一个Error,如下所示:

 function main() { throw new Error("An error!"); } 

然后用node my-app-that-launchers-main.js执行它,然后显然,错误被抛出,我得到一个node my-app-that-launchers-main.js

如果我为此写一个咕噜的任务:

 var mynpm = require("mynpm"); module.exports = function(grunt) { grunt.registerTask("build",function() { mynpm.build(); }); } 

并通过Grunt执行它,然后失败。 如预期的那样,错误被抛出,咕噜声失败。

不过,如果我把这个扔在蓝鸟的承诺里面:

 function main() { Promise.try(function(resolve) { throw new Error("An error!"); } ).catch(function() { console.log("error"); } ).finally(function() { console.log("finally"); }); } 

并通过node运行,然后我看到catch函数被调用。 正如所料。

但是,如果我通过Grunt的registertask运行相同的代码,一切都变得沉默。 也不是finally的结果。

什么可能造成这一点。 似乎Grunt劫持错误被抛出。

这是一个超级容易重现,但我为什么这么困惑。

咕噜劫持抛出的错误,不知何故,甚至连Promise的catch和finally函数都被调用?

如果执行和error handling手动执行,与Grunt执行代码相比如何不同呢?