我正在使用express框架来处理请求。一些步骤涉及调用异步函数。最终我希望返回在其中一个函数中计算的值。
app.post("/hello", function(req, res) {
...
...
myFunc(finalFantasy);
}
function myFunc(callback) {
...
callback();
}
function finalFantasy() {
//I want to return this value in the response
var result = "magic";
}
如何在响应中使用 finalFantasy 函数中计算的值?
答案 0 :(得分:2)
您必须将res
实例传递给回调,或者像第二个示例一样使用回调。
app.post("/hello", function(req, res) {
...
...
myFunc(finalFantasy, req, res);
}
function myFunc(callback, req, res) {
...
callback(req, res);
}
function finalFantasy(req, res) {
//I want to return this value in the response
var result = "magic";
res.end(result);
}
另一个例子是:
app.post("/hello", function(req, res) {
...
...
var i = 3;
myFunc(i, function(data) {
res.end(data); // send 4 to the browser
});
}
function myFunc(data, callback) {
data++; //increase data with 1, so 3 become 4 and call the callback with the new value
callback(data);
}
答案 1 :(得分:2)
app.post("/hello", function(req, res) {
...
...
var result = myFunc(finalFantasy);
}
function myFunc(callback) {
...
return callback();
}
function finalFantasy() {
//I want to return this value in the response
var result = "magic";
return result;
}
你几乎拥有它,就像@ raina77ow在评论中说的那样,将结果传回来
答案 2 :(得分:1)
继续传递res
,并在最终的“响应生成函数”中,向其发送数据。使用express执行此操作的一般方法是使用中间件级联,在res.locals中存储持久值:
app.get("/", function(req, res, next) {
// do things
next();
},function(req, res, next) {
// do more things
next();
},function(req, res, next) {
// do even more things!
next();
},function(req,res) {
// and finally we form a response
res.write(things);
});
虽然您通常将其放在中间件文件中,然后包含它,调用其函数:
// middleware "lib/functions.js" file
module.exports = {
a: function(req, res, next) { ... },
b: function(req, res, next) { ... },
c: function(req, res, next) { ... }
}
然后在你的app.js,main.js或类似明显的主文件中:
var mylib = require("./lib/functions");
...
app.get("/", mylib.a, mylib.b, mylib.c);
...
完成。通过next
概念很好,有条理,自动直通。
答案 3 :(得分:1)
//使用匿名函数
包装finalFantasyapp.post("/hello", function(req, res) {
...
...
myFunc(function () {
var ret = finalFantasy();
res.send(ret);
});
}
function myFunc(callback) {
...
callback();
}
function finalFantasy() {
//I want to return this value in the response
var result = "magic";
}