【发布时间】:2013-05-30 08:23:54
【问题描述】:
使用以下代码,我希望任务“asyncfail”会导致一些错误输出进入控制台,并且退出代码不为零(就像任务“syncfail”一样)。但实际发生的情况是 jake 在没有进一步输出的情况下完成(下面的示例输出)并且进程退出代码指示成功。我不确定我是否对杰克做错了什么,或者承诺......有什么想法吗?
var Q = require("q");
task("syncfail", function() {
fail("synchronous failure");
});
var http = require("http");
task("asyncfail", function() {
waitForSleep().then(waitForSleep).then(waitForSleep).then(waitForSleep).then(function() {
console.log("all done, time to fail");
fail("This is the end");
});
console.log("finishing sync part");
}, { async:true});
function waitForSleep() {
var deferred = Q.defer();
setTimeout(function() {
console.log("finished timeout");
deferred.resolve();
});
return deferred.promise;
}
以下是任务 syncfail(按我预期完成)和 asyncfail(按我预期完成)的一些示例输出:
C:\src\letscodejavascript>node node_modules\jake\bin\cli.js -f .\jakerepro.js syncfail
jake aborted.
Error: synchronous failure
at api.fail (C:\src\letscodejavascript\node_modules\jake\lib\api.js:221:18)
(See full trace by running task with --trace)
C:\src\letscodejavascript [master]> $lastexitcode
1
C:\src\letscodejavascript [master]> .\jake.bat -f .\jakerepro.js asyncfail
C:\src\letscodejavascript>node node_modules\jake\bin\cli.js -f .\jakerepro.js asyncfail
finishing sync part
finished timeout
finished timeout
finished timeout
finished timeout
all done, time to fail
C:\src\letscodejavascript [master]> $lastexitcode
0
【问题讨论】: