SailsJS / NodeJS管理异步性质

时间:2014-05-17 10:21:49

标签: javascript node.js asynchronous sails.js waterline

我的控制器中有一个代码,用于http请求,以保存用户在前端添加的帖子。所以我做了类似的事情,Model.create()。 现在发生的是回调我想要返回是否成功添加帖子,以便我的前端可以向用户显示适当的消息。但是create方法异步工作。 以下是示例代码:

create: function(req, res){

    Activity.create(req.body).done(
            function(err, persistedActivity) {

                    // Error handling
                    if (err) {

                        return res.json({success: false});
                        // The Activity could not be created!
                    } else {

                        return res.json({success : true});
                    }
            }
    );

}

但是这段代码不起作用,因为Activity.create()方法是异步的。 我也在其他问题或帖子中读过它。没有任何迹象表明我正在寻找的确切实现,但它确实告诉我"不要打击nodejs的异步性质。它只会在以后伤害。"并相信我,就像其他人一样,我不想受伤。 我基本上需要有关如何处理这个问题的建议。

1 个答案:

答案 0 :(得分:2)

如果您想尝试使用Sails承诺,它将如下所示:

create: function(req, res){
    Activity.create(req.body)
    .then(function(persistedActivity) {
        return res.json({success : true});
    })
    .fail(function(err){
        return res.json({success: false});
        // The Activity could not be created!
    })
}

我在没有承诺的情况下使用SailsJS并不熟悉,但在链接创建调用时,您可能想尝试使用exec而不是done?我知道我已经使用了exec,但我从未以这种方式使用done

- 更新:done()似乎已弃用exec(),所以如果您使用10.x,我肯定会尝试这样做 reference