【发布时间】:2015-05-13 19:17:41
【问题描述】:
鉴于以下 gulp 任务,为什么我会收到以下错误?
错误:任务完成回调调用次数过多
function myTask(options, cb) { // cb is the gulp cb
var serverInstance = http.createServer(dispatch({ /*routes*/ }));
serverInstance.listen(options.port, function() {
cb(); // Stack trace identifies this line as throwing the error
});
}
function partial(fn) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
};
}
gulp.task('task-name', ['task-dependency'], partial(myTask, { port: 8080 }));
编辑:
以下修改使其工作(但我的问题仍然存在):
gulp.task('task-name', ['task-dependency'], function(cb) {
partial(myTask, { port: 8080 })(cb);
});
【问题讨论】:
-
我对 gulp 不是很熟悉,但它不是用来构建的吗?您似乎正在使用它来启动服务器。如果您多次访问该服务器,
cb()回调将被多次调用。 -
是的,在此构建任务结束时,将启动一个服务器,该服务器将交付应用程序以在开发人员的机器上进行测试。
-
@JLRishe 提供的回调仅在服务器(IIUC)引发监听事件时调用一次nodejs.org/api/…
-
这个问题是否与需要向 gulp 提供有关任务终止方式的提示有关?
-
@JLRishe 不符合 http-server 文档。当服务器开始监听时,该回调应该只被调用一次。
标签: javascript gulp