У меня странное поведение при использовании gulp в качестве инструмента сборки. Я получил следующий код из другого вопроса, который предназначен для очистки файлов сборки перед другим запуском:
function clean() {
var delResult = del(['build/**/*', 'dist/**/*']);
return delResult.then(del(['build', 'dist']));
}
gulp.task('clean', clean);
Затем у меня есть задача по умолчанию, которая включает в себя задачу очистки в остальной части сборки:
gulp.task('default', gulp.series('clean', gulp.parallel('doJsStuff, doCssStuff', 'doEvenMoreStuff'));
Проблема в том, что gulp уже продолжает сборку до завершения двух операций del. Насколько я понимаю, then
вернет обещание, и глоток должен продолжиться, когда это обещание будет выполнено. Конечно, then
-обещание не может быть выполнено до того, как выполнится первое del
-обещание. Поэтому я думаю, что это должно работать, как ожидалось, но это не так.
Поведение одинаково в gulp 3 и 4.
Я знаю, что могу сделать то же самое, используя только один del
-вызов:
function clean() {
return del(['build/**', 'dist/**']);
}
Это действительно работает и является решением моей проблемы. Еще я хотел бы понять, почему не работают прикованные промисы. Кто-нибудь может мне сказать?
.then()
принимает функцию, а неPromise
. Возможно, вы имели в видуreturn delResult.then(() => del(['build', 'dist']));
? - person Patrick Roberts   schedule 18.07.2018del(['build', 'dist'])
будет выполняться сразу, а не после того, как перваяdel
закончилась, потому что я передаю результатdel
вthen
, а не самуdel
-функцию. Очевидно, это приводит к недетерминированному поведению. Спасибо! Я с удовольствием приму ваш комментарий в качестве ответа. - person Fencer   schedule 31.07.2018