Задача gulp 'default' завершается без запуска обратного вызова

Недавно я обновился с gulp 3 до 4 - у меня есть руководства по обновлению, и я изменил свой код в соответствии с ним, но я все еще получаю странное поведение.

Вот небольшой воспроизводимый случай:

gulp.task('do-nothing', function (done) {
    setTimeout(function () {
        done()
    }, 3 * 1000)
})

gulp.task("default", gulp.parallel("do-nothing"), function (done) {
    console.info(`\n\n\nWHY AM I NOT BEING RUN`)
})

Когда gulp запускается, вывод:

[14:10:57] Using gulpfile ~\Code\certsimple\gulpfile.js
[14:10:57] Starting 'default'...
[14:10:57] Starting 'do-nothing'...
[14:11:00] Finished 'do-nothing' after 3.01 s
[14:11:00] Finished 'default' after 3.02 s

На консоль не выводится WHY AM I NOT BEING RUN.

Почему это?

попробуйте добавить возврат в setTimeout

harishr 21.06.2019 05:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
128
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это должно работать.

gulp.task('do-nothing', function (done) {
    setTimeout(function () {
        done()
    }, 3 * 1000)
})

gulp.task("default",

    gulp.parallel("do-nothing", function (done) {
      console.info(`\n\n\nWHY AM I NOT BEING RUN`)
      done()
    })

);
gulp.task('do-nothing', function (done) {
setTimeout(function () {
    done()
}, 3 * 1000)
})

gulp.task("default", gulp.parallel("do-nothing", function (done) {
    console.info(`\n\n\nWHY AM I NOT BEING RUN`)
}))

Это то, что вы ищете, функция является третьим аргументом gulp.task, который мне не подойдет. Точно так же gulp.parallel только с одной задачей в качестве входных данных должен быть таким же, как и сам вкус.

Ответ принят как подходящий

У вас есть эта строка:

gulp.task("default", gulp.parallel("do-nothing"), function (done) {

Обратите внимание, что у него есть аргументы три: строковое имя задачи, gulp.parallel() и вызов анонимной функции. Это синтаксис gulp3. Вот сигнатура функции gulp4 task:

task([taskName], taskFunction)  // note only **two** arguments.

Из gulp 4 документация для подписи task.

Вот почему ваш console.info никогда не достигается. Поэтому вам просто нужно поместить свою анонимную функцию в аргумент gulp.parallel, чтобы исправить это.

gulp.task("default", gulp.parallel("do-nothing", function (done) {
    console.info(`\n\n\nWHY AM I NOT BEING RUN`)
}));

Кроме того, поскольку вы используете gulp.parallel, console.info не будет ждать завершения do-nothing.

Другие вопросы по теме