Что делает метод Gulp "done"?

Простой вопрос, чтобы выяснить, что делает параметр "done" в задаче gulp?

Я понимаю, это обратный вызов в функции задачи, как показано ниже.

gulp.task('clean', function(done) {
    // so some stuff
    creategulptask(cleantask(), done);
});

Но в чем причина его прохождения?

Ответ 1

В документации gulp указано что-то похожее на следующее:

var gulp = require('gulp');

// Takes in a callback so the engine knows when it'll be done
// This callback is passed in by Gulp - they are not arguments / parameters
// for your task.
gulp.task('one', function(cb) {
    // Do stuff -- async or otherwise
    // If err is not null and not undefined, then this task will stop, 
    // and note that it failed
    cb(err); 
});

// Identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
    // Task 'one' is done now, this will now run...
});

gulp.task('default', ['one', 'two']);

Проводящий аргумент передается в функцию обратного вызова, используемую для определения ваших задач.

Функция задания может принимать параметр функции "обратный вызов" (часто этот параметр функции называется done). Выполнение этой функции done сообщает gulp "подсказку, чтобы сказать это, когда задача выполнена".

Gulp требуется эта подсказка, если вы хотите заказать ряд задач, которые зависят друг от друга, как показано в приведенном выше примере. (т.е. задача two не начнется, пока задача one не вызовет cb()). По сути, она перестает запускать задачи одновременно, если вы не хотите их.

Подробнее об этом вы можете узнать здесь: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support

Ответ 2

Параметр done не является обратным вызовом, анонимным function является обратный вызов. done - это просто аргумент, который вы можете передать методу обратного вызова по любой причине.

Задача A gulp обычно определяется как:

gulp.task('somename', function() {
  // Do stuff
});

В функции вы можете определить, какой код выполняется в задаче. Если этот код зависит от любых аргументов, вы можете передать их как параметры функции:

gulp.task('birthdayTask', function(name, dateOfBirth) {
  doFancyStuff(name, dateOfBirth);
});

В вашем случае done, вероятно, является еще одним обратным вызовом, который выполняется, как только метод cleantask() завершен. Таким образом, он будет действовать как своего рода механизм уведомления, когда будет выполнена очистка. Это, однако, не может быть выведено из вашего кода, так как вы не указали код своей функции cleantask(), поэтому просто угадайте здесь.