如何重新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
})
});
环境
我的环境: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
})
});