Dato il seguente task gulp, perché dovrei ricevere il seguente errore?Perché dovrei ricevere "callback di completamento attività chiamato troppe volte" in gulp?
Error: task completion callback called too many times
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 }));
Edit:
La seguente modifica rende il lavoro (la mia domanda rimane ancora però):
gulp.task('task-name', ['task-dependency'], function(cb) {
partial(myTask, { port: 8080 })(cb);
});
Non ho molta familiarità con Gulp, ma non è previsto per l'esecuzione di build? Sembra che tu stia usando per avviare un server. E se accedi a quel server più di una volta, il callback 'cb() 'sarà chiamato più di una volta. – JLRishe
Sì, al termine di questa attività di build, viene avviato un server che consegnerà l'applicazione a scopo di test sul computer di uno sviluppatore. – Ben
@JLRishe il callback fornito viene richiamato una sola volta quando l'evento di ascolto viene generato dal server (IIUC) https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback – Ben