Node.js函数没有callback

我有一个node.js服务器。 当用户请求一个页面时,我调用一个从db中获取信息并为请求提供服务的函数。 简单的函数与callback,然后执行response.send

我需要执行二次计算/数据库更新,这对于呈现页面请求不是必需的。 我不希望用户等待这些二级操作完成(即使它们只需要200毫秒)。

有没有办法调用一个函数,并没有callback优雅地退出?

       

网上收集的解决方案 "Node.js函数没有callback"

你可以简单地做这样的事情

app.get('/path', function(req, res){ getInfoFromDatabase(); // get info from the database res.render('myview', {info: data}); // perform post render operations postRenderingCode(); return; }); 

如果我正确理解你的问题,你可以使用setTimeout值为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); }); 

输出将是:

 Here's your data John Here's your data Jane Doing some maintenance work now... Doing some maintenance work now... 

您可以在实际响应之前或之后调用额外的asynchronous函数; 例如:

 yourCoolFunction() // does awesome stuff... response.writeHead(200, 'OK'); response.write('some cool data response'); response.end(); 

请注意,提到的“yourCoolFunction”必须是asynchronous的,否则其余代码将等待它完成。

假设你正在使用express.js:

 function(req, res, next) { doSomeAsyncWork(function(e, d) { // Some logic. doSomeMoreAsyncWork(function() {}) res.send(/* some data*/) }) } 

基本上你并不关心额外的asynchronous工作的反应,所以你可以放入一个函数,对callback没有任何作用。

因为我可以看到迄今为止的答案都没有什么帮助,为了避免混淆。 我build议使用你正在处理的对象如下:

 function doStuff() { myObj.emit('myEvent', param); } function callback(param) { do stuff; } myObj.on('myEvent', callback); 

好吧,只要做你说的话,渲染页面,回应请求并做任何你必须做的事情,你的代码不会突然死亡,因为你响应了请求。

与快递:

 function handleTheRequest(req, res) { res.status(200).send("the response") // do whatever you like here }