Gulp 任务不退出

Gulp tasks do not exit

我有一个 gulpfile.js 有很多任务。

我注意到我的 gulp 任务 运行,但完成后它们没有 exit/terminate。我必须使用 control + c 退出。 我浏览了一个讨论类似问题的线程,但它使用的是 gulp-mocha 并且插件中存在问题。

就我而言,我也知道是什么导致了这个问题。我需要一个我编写的 js(edgecaset.js) 文件到我的 gulp 文件中(其中一个任务使用该文件中的一个函数)。它是一个简单的文件,具有一个与其余交互的功能 api。如果我不需要那个文件,一切都很好。

我只从 edgecast.js 文件中导出一个函数,以便在 gulp 文件中使用。它调用了 setTimeOut 函数(这可能是问题所在吗?)

谁能帮我找出问题所在?

var main = function () {
    console.log(config.edgecast.username);
    ftp.put(config.ftp.local_path, config.ftp.remote_path, function(hadError) {
        if (!hadError) {
            console.log('File transferred successfully');
            rest.put(config.edgecast.purge_url, purgeOptions).on('complete', function(data, response) {
                if (response.statusCode != 200)
                    console.log('Purge failed');
                else {
                    console.log('Purge request Issued');
                    purgeID = data.Id;
                    setTimeout(function() {
                        rest.get(config.edgecast.get_purge_url + purgeID, purgeOptions).on('complete', function(data) {
                            if (data.CompleteDate) {
                                console.log('Purge completed on ' + data.CompleteDate);
                                rest.put(config.edgecast.load_url, loadOptions).on('complete', function(data, response) {
                                    if (response.statusCode == 200)
                                        console.log('Asset Loaded');
                                    else {
                                        console.log('Load Failed');
                                        console.log(response.statusCode);
                                    }
                                });
                            }
                        });
                    }, 180000);
                }
            });
        } else console.log('File Transfer Failed. ' + hadError);
        ftp.raw.quit(function(err) {
            if (err) return console.error(err);
        });
    });
};

以上是我从 edgecast.js 文件导出的函数。这是文件中的唯一函数。剩下的只是变数。然后在 gulpfile.js 中有

var edgecast = require('./edgecast.js');

而这个 require 语句导致了所有问题。

edgecast.js 文件导入了以下库。

var rest = require('restler'),
    config = require('./config'),
    JSFtp = require('jsftp'); 

找到问题了。结果 gulp 任务不会退出,因为 FTP 连接保持打开状态,它们会一直等到它关闭