如何重新post(重新启动)Node.js中的POST函数

How to re-post (re-start) the POST function in Node.js

环境

我的环境:Node.js 使用 Express 4.0

主图书馆:Async.js

当我使用异步编程时。在一些IF/ELSE-statements必须重新启动这个功能,但我不能这样做。


app.post('/postpage', function (req, res) {
    async.waterfall([
        // A part.
        function (callback) {
            // Here will do something.
            callback(null, a);
        },
        // B part.
        function (a, callback) {
            // Here will do something.
            callback(null, a, b);
        },
        // C part.
        function (a, b, callback) {
            if (....) {
                // Here will do something.
                callback(null, a, b, c);
            else {
                // Here need to jump to 'A part' and run.
            }
        },
    ], function (err, ...) {
        ...
    });
});

问题

// Here need to jump(or return) to 'A part' and run.,上面代码中的这一行。怎么写代码来完成呢

所以你要求的是递归。尽管您需要小心,因为 JavaScript 没有尾调用优化,所以最终您的堆栈会溢出。无论如何,这应该做到:

app.post('/postpage', function (req, res) {
    recurWaterfall = function(finalCallback) {
        async.waterfall([
            // A part.
            function (callback) {
                // Here will do something.
                callback(null, a);
            },
            // B part.
            function (a, callback) {
                // Here will do something.
                callback(null, a, b);
            },
            // C part.
            function (a, b, callback) {
                if (....) {
                    // Here will do something.
                    callback(null, a, b, c);
                else {
                    // Here need to jump to 'A part' and run.
                    recurWaterfall(callback)
                }
            },
        ], function (err, ...) {

            // You must call this
            finalCallback(err, ....)
        });
    }

    // Call your waterfall the first time
    recurWaterfall(function(err, ...){
        // Whatever to do after waterfall is finished

    })
});