2

我刚开始通过创建一个简单的博客网站来试验 Node.js Express 和 Mongoose。

我正在尝试构建一些将执行一些简单的数据库操作的路由,但是我对异步函数以及我的代码是否每次都能正确执行感到困惑。

这基本上就是我所拥有的:

app.get('/createUser', function(req, resp) {
    var newUser = new User({name: 'abc123', pass: 'password321'});
    newUser.save(function(err){ // will this callback always be called correctly?
        if(err) resp.send('ERROR!');
        resp.send('SUCCESS!');
    });
});

所以我希望将响应写为“错误!” 对于保存中的任何错误,以及“成功!” 保存成功时。但是,我对这些功能的时间安排感到困惑。get() 函数会在 save() 完成之前返回吗?如果是这样,响应会不会被正确写出?

4

1 回答 1

4

get() 函数将在 save 函数执行之前完成,但由于在执行 save 回调之前没有任何内容写入响应,因此在此之前响应对浏览器不可用。

我在您的代码中添加了一些 console.log() 调用,以便您可以查看执行顺序:

app.get('/createUser', function(req, resp) {

    console.log('this will print first');

    var newUser = new User({name: 'abc123', pass: 'password321'});
    newUser.save(function(err){ // will this callback always be called correctly?

        console.log('this will print last');

        if(err) {
            resp.send('ERROR!');
        }
        else {
            resp.send('SUCCESS!');
        }
    });

    console.log('this will print second');

});
于 2012-12-11T21:54:56.557 回答