【发布时间】:2016-01-03 11:07:12
【问题描述】:
我已经定义了 gulp 任务 'clean-code' 和函数 'clean' 如下
gulp.task('clean-code', function (done) {
var files = ...;
clean(files, done);
});
function clean (path, done) {
del(path).then(done);
}
出现错误
/usr/local/bin/node /usr/local/lib/node_modules/gulp/bin/gulp.js --color --gulpfile /Users/[path to project]/Gulpfile.js clean-code
[11:45:04] Using gulpfile /Users/[path to project]/Gulpfile.js
[11:45:04] Starting 'clean-code'...
[11:45:04] Cleaning: ./.tmp/**/*.js,./build/**/*.html,./build/js/**/*.js
[11:45:04] 'clean-code' errored after 8.68 ms
[11:45:04] Error
at formatError (/usr/local/lib/node_modules/gulp/bin/gulp.js:169:10)
at Gulp.<anonymous> (/usr/local/lib/node_modules/gulp/bin/gulp.js:195:15)
at emitOne (events.js:77:13)
at Gulp.emit (events.js:169:7)
at Gulp.Orchestrator._emitTaskDone (/Users/[path to project]/node_modules/gulp/node_modules/orchestrator/index.js:264:8)
at /Users/[path to project]/node_modules/gulp/node_modules/orchestrator/index.js:275:23
at finish (/Users/[path to project]/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:21:8)
at cb (/Users/[path to project]/node_modules/gulp/node_modules/orchestrator/lib/runTask.js:29:3)
但是当我以以下方式重构函数“干净”时,一切正常
function clean (path, done) {
var f = function () {
done();
};
del(path).then(f);
}
我不明白区别在哪里以及为什么用 f 完成包装会使任务正常工作
【问题讨论】:
-
如果我不得不猜测 -
done接受参数 - 第一个参数是Error表示突然完成。这是节点回调约定。如果你在then之后调用done并且del有一个返回值——它会失败。如果你使用 bluebird promises,你会使用del(path).nodeify(done)来克服这个问题。
标签: javascript callback gulp promise del