(蓝鸟)中的咕噜声无声错误?
我有一个以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执行代码相比如何不同呢?