Оберните функцию в gulp.series
или gulp.parallel
, чтобы Gulp отображал ее статус. Это не выглядит элегантным решением, но это лучшее, что я нашел.
Вот универсальный пример:
function runGulpTask(func) {
return new Promise((resolve, reject) => gulp.series(func)(error => {
if (error) {
reject(error);
} else {
resolve();
}
}));
// The same solution using built-in Node.js functions:
// const {promisify} = require('util');
// return promisify(gulp.series(func))();
}
async function doStaff(todo) {
// ...
}
exports.default = async () => {
const todos = await myAPI.getTodos();
await Promise.all(todos.map(async todo => {
const subTask = doStuff.bind(todo);
subTask.displayName = `todo «${todo.name}»`;
await runGulpTask(subTask);
}));
};
Вывод Gulp соответствует ожидаемому выводу.
А вот более конкретный пример:
async function doStaff(todo) {
// ...
}
exports.default = async () => {
const todos = await myAPI.getTodos();
const subTasks = todos.map(todo => {
const subTask = doStuff.bind(todo);
subTask.displayName = `todo «${todo.name}»`;
return subTask;
});
await new Promise((resolve, reject) => gulp.parallel(...subTasks)(error => {
if (error) {
reject(error);
} else {
resolve();
}
}));
// Or using built-in Node.js functions:
// const {promisify} = require('util');
// await promisify(gulp.parallel(...subTasks))();
};