【问题标题】:SailsJS/NodeJS managing asynchronous natureSailsJS/NodeJS 管理异步性质
【发布时间】:2014-05-17 10:21:49
【问题描述】:

我的控制器中有一个代码,它适用于 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 的异步性质作斗争。它只会在以后受到伤害。”,相信我,像其他人一样,我不想受到伤害。 我基本上需要关于如何处理这个问题的建议。

【问题讨论】:

  • 不,无法到达那里。它没有给我解决方案,已经解决了。
  • 好的,你能从函数中返回一个promise吗?
  • 我在这里寻找建议,如果是建议,我会研究承诺并回复..
  • 这里有什么问题,代码不起作用 - 你得到什么响应?请求的响应不需要同步创建,从异步回调中调用res.json() 非常好。

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


【解决方案1】:

如果你想用 Sails 的 Promise 试试这个,它看起来像这样:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2012-12-20
    • 1970-01-01
    • 2013-03-19
    相关资源
    最近更新 更多