我有一个node.js服务器。当用户请求页面时,我调用一个从db中提取一些信息并为请求提供服务的函数。带回调的简单函数然后执行response.send
我需要执行二次计算/数据库更新,这些更新对于呈现页面请求不是必需的。我不希望用户等待这些辅助操作完成(即使它们只需要200毫秒。)
有没有办法调用函数并在没有回调的情况下正常退出?
答案 0 :(得分:3)
你可以简单地做这样的事情
app.get('/path', function(req, res){
getInfoFromDatabase(); // get info from the database
res.render('myview', {info: data});
// perform post render operations
postRenderingCode();
return;
});
答案 1 :(得分:1)
如果我正确理解您的问题,您可以使用值setTimeout
的{{1}}将维护代码放在执行队列的末尾。
0
输出将是:
function service(user, callback) {
// This will be done later
setTimeout(function() {
console.log("Doing some maintenance work now...");
}, 0);
// Service the user
callback("Here's your data " + user);
}
service("John", function(data) { console.log(data); });
service("Jane", function(data) { console.log(data); });
答案 2 :(得分:0)
您可以在实际响应之前或之后调用额外的异步功能;例如:
yourCoolFunction() // does awesome stuff...
response.writeHead(200, 'OK');
response.write('some cool data response');
response.end();
请注意,提到的“yourCoolFunction”必须是异步的,否则其余代码将等待它完成。
答案 3 :(得分:0)
假设您正在使用express.js:
function(req, res, next) {
doSomeAsyncWork(function(e, d) {
// Some logic.
doSomeMoreAsyncWork(function() {})
res.send(/* some data*/)
})
}
基本上你并不真正关心额外的异步工作的响应,所以你可以放入一个对回调没有任何作用的函数。
答案 4 :(得分:0)
因为到目前为止我看不到任何答案都有所帮助,以避免混淆。我建议使用你正在处理的对象:
function doStuff() {
myObj.emit('myEvent', param);
}
function callback(param) {
do stuff;
}
myObj.on('myEvent', callback);
答案 5 :(得分:0)
好吧,只要做你说的话,渲染页面,回复请求并做任何你必须做的事情,你的代码就不会因为你回复请求而突然死亡。
快递:
function handleTheRequest(req, res) {
res.status(200).send("the response")
// do whatever you like here
}