Node.js函数没有回调

时间:2014-11-12 21:41:04

标签: javascript node.js

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

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

有没有办法调用函数并在没有回调的情况下正常退出?

6 个答案:

答案 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
}