发送响应'当一个操作完成

时间:2015-09-24 18:03:06

标签: node.js asynchronous express

我正在使用Express根据POST请求的正文构建一堆文件。每当应用收到POST Request时,它都会调用一些长时间运行的函数来生成文件:

app.post('/test', function(req, res) {
    buildMyFiles(req.body);    // making files 
    res.send('got the post');
});

在创建所有文件之前,我不想发回任何回复。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您需要编写buildMyFiles来支持异步回调事件:

app.post('/test', function(req, res) {
    buildMyFiles(req.body, function(err) {
        res.send('got the post');
    });
});

function buildMyFiles(body, callback) {
    /* 
    do lots of synchronous, long-running operations here
                    ^ emphasis

    if the build fails, define err (if the build succeeded, it'll be undefined)
    then execute the callback function 
    */

    callback(err);
}

如果您希望构建器是异步的,可以考虑使用async之类的东西来串行处理它们。由于我不知道您的POST请求是什么样的,我假设body.files是一个数组而buildFile是您可能编写的另一个异步函数:

function buildMyFiles(body, callback) {
    async.each(body.files, function(file, callback) {
        buildFile(file, function(done) {
            callback()
        });
    }, function(err, results) {
       // async building is complete
       callback(err);
    });
}