Gulp如何知道异步依赖任务何时完成(具体地说,“gulp-connect”)?

yv5phkfx  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(179)

在学习Gulp时,我看到了这个简单的例子,它在第一个任务完成后运行第二个任务:

var gulp = require('gulp');
var connect = require('gulp-connect');

// First task
gulp.task('connect', function() {
    // No callback is provided to Gulp to indicate when the server is connected!
    connect.server();
});

// Second task runs after the first task 'completes'
gulp.task('open', ['connect'], function() {

    // v v v
    // Question: since no callback is provided to indicate when 'connect' completes,
    // how does Gulp know when to run this task?

    // Some task here...
});

我的问题很简单。
我认为connect.server()任务必须是异步的,因此在其实现中的某个地方是:

http.createServer(function(request, response) {
    // Presumably, before the first request can be received,
    // there must be an asynchronous delay while the server initializes

    /// ...handle HTTP requests here...
});

我假设在第一个任务接收到第一个请求之前有一个异步延迟--只有当请求准备好被接收时,第一个任务才应该被认为是“完成”的,这样Gulp就可以运行第二个任务了。
在这种情况下,Gulp如何知道服务器已完全连接并接收请求,从而知道运行第二个任务?
我没有看到为Gulp提供的回调,Gulp可以使用它作为触发器来指示下一个任务已准备好运行。

aij0ehis

aij0ehis1#

在这种情况下,我不相信你可以100%肯定的两个原因。
第一个原因是没有向connect任务传递回调函数。
Gulp允许任务将回调传入任务函数,以明确地发出任务完成的信号。
你可以这样做

gulp文件

gulp.task('connect', function(done) {
    connect.server(function() {
        return done();
    });
});

服务器

module.exports = function(callback) {
    let server = http.createServer();
    let port = process.env.PORT || 3000;

    // all of your routes and server logic

    server.listen(port, function() {
        console.log('listening on ' + port);            
        if (callback)
            return callback;            
    });
}

相关问题