gpt4 book ai didi

javascript - 如何顺序运行多个 gulp 函数?

转载 作者:行者123 更新时间:2023-12-03 00:44:58 25 4
gpt4 key购买 nike

要注册 gulp 任务,我使用以下代码:

gulp.task('test-module', function() {
return testModule(__dirname);
});

这是testModule函数:

export function testModule(modulePath) {
let task1 = buildModule(modulePath, true);
let task2 = buildTestModule(modulePath);
let task3 = runModuleTests(modulePath);
return [task1, task2, task1];
}

此代码的问题在于 runModuleTests(modulePath)buildModule(modulePath, true)buildTestModule(modulePath) 生成之前被调用文件。因此,当执行 runModuleTests(modulePath) 时,没有用于测试的文件,也没有包含测试的文件。

我也尝试过

import gulpall from 'gulp-all';

export function testModule(modulePath) {
return gulpall(
buildModule(modulePath, true),
buildTestModule(modulePath),
runModuleTests(modulePath)
);
}

但结果是一样的。我该如何修复它?

最佳答案

您的函数,尤其是 buildModulebuildTestModule 在它们内部执行异步操作。因此,如您所知,runModuleTests 在它们完成之前被调用。我用下面的代码模拟了这种行为:

const gulp = require('gulp');

// gulp.task('test-module', function() {
gulp.task('default', function() {
return testModule(__dirname);
});

function testModule(modulePath) {
let task1 = buildModule(modulePath, true);
let task2 = buildTestModule(modulePath);
let task3 = runModuleTests(modulePath);
return [task1, task2, task1];
}

function buildModule (path) {

setTimeout(() => {
console.log("in buildModule, should be step 1");
}, 2000);
};

function buildTestModule (path) {

setTimeout(() => {
console.log("in buildTestModule, should be step 2");
}, 2000);
};

function runModuleTests (path) {

console.log("in runModuleTests, should be step 3");
};

我在前两个函数中添加了延迟,以显示早期函数异步时发生的情况。结果:

in runModuleTests, should be step 3
in buildModule, should be step 1
in buildTestModule, , should be step 2

解决此问题的一种方法是使用 async/await 并 promise (如果可以的话)。所以试试这个代码:

gulp.task('test-module', function(done) {
testModule(__dirname);
done();
});

// function testModule(modulePath) {

async function testModule(modulePath) {

let task1 = await buildModule(modulePath, true);
let task2 = await buildTestModule(modulePath);
let task3 = await runModuleTests(modulePath);

return [task1, task2, task1];
}

function buildModule (path) {
return new Promise(resolve => {

setTimeout(() => {
resolve(console.log("in buildModule, should be step 1"));
}, 2000);

// put your functionality here without the setTimeout() call above
});
};

function buildTestModule (path) {
return new Promise(resolve => {

setTimeout(() => {
resolve(console.log("in buildTestModule, , should be step 2"));
}, 2000);

// put your functionality here without the setTimeout() call above
});
};

function runModuleTests (path) {
return new Promise(resolve => {

// put your gulp.src pipeline here
console.log("in runModuleTests, should be step 3");
});
};

结果:

in buildModule, should be step 1
in buildTestModule, , should be step 2
in runModuleTests, should be step 3

因此,让您的函数返回 Promises,然后等待它们的结果。这将保证函数以正确的顺序返回。

关于javascript - 如何顺序运行多个 gulp 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com