Задача в gulp может быть определена следующим образом:
gulp.task('foobar', function(callback) { ... });
Я пытаюсь понять, что такое функция обратного вызова. Где это определено? Могу ли я передать какую-либо другую функцию в качестве аргумента во время выполнения? Что он делает?
Эти документы указывают, что аргумент обратного вызова является подсказкой для Orchestrator о том, что задача должна выполняться асинхронно, когда выполнение обратного вызова указывает, что задача async завершена.
С некоторыми экспериментами он выглядит как вызов обратного вызова без аргументов, возвращает состояние успеха, а вызов его с некоторой строкой вызывает ошибку:
gulp.task('foobar', function(callback) {
callback();
});
gulp.task('bazkad', function(callback) {
callback("some string");
});
(в сторону: как поместить разрыв между кодами в методе StackOverflow?)
$ gulp foobar
[09:59:54] Using gulpfile ~\repos\gulpproj\gulpfile.js
[09:59:54] Starting 'foobar'...
[09:59:54] Finished 'foobar' after 56 μs
$ gulp bazkad
[10:05:49] Using gulpfile ~\repos\gulpproj\gulpfile.js
[10:05:49] Starting 'bazkad'...
[10:05:49] 'bazkad' errored after 55 μs
[10:05:49] Error: some string
at formatError (~\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:169:10)
at Gulp.<anonymous> (~\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:195:15)
at Gulp.emit (events.js:107:17)
at Gulp.Orchestrator._emitTaskDone (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:264:8)
at ~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:275:23
at finish (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8)
at cb (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:29:3)
at Gulp.<anonymous> (~\repos\gulpproj\gulpfile.js:35:5)
at module.exports (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:34:7)
at Gulp.Orchestrator._runTask (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:273:3)
Итак, у меня есть вопросы:
- Является ли это единственной функциональностью обратного вызова, чтобы вызвать исключение, если передано аргумент и успешно завершить его в противном случае, или он сделает что-то еще?
- Могу ли я переопределить его с помощью какой-либо другой функции (и для этого была бы разумная причина)?
Возможно, мои навыки чтения документации не сработали (я бы не первый раз), но я не могу найти ответы на эти вопросы в документах API.
Спасибо за любую помощь.