【问题标题】:How to make synchronous call with mongoose and nodejs如何使用 mongoose 和 nodejs 进行同步调用
【发布时间】:2014-08-23 13:46:33
【问题描述】:

我正在设计一个客户端/服务器同步功能。客户端将一堆更改的事件发送到服务器。服务器将根据请求的项目状态进行创建、删除或修改。数据库操作完成后,服务器需要将摘要发送回客户端。

以下是我的服务器端代码的摘录,使用 mongoose 和 restify 设计。

var EventModel = mongoose.model('Event', eventSchema);
server.post("/sync", function (req, res, next) {
    var events = req.params.events;
    var created = [], deleted = [], updated = [];
    events.forEach(function (elem) {
        if (elem.status == 0) {
            // Delete
            EventModel.remove({ _id: elem.uuid }, function (err, event) {
                if (!err) deleted.push({uuid: elem.uuid});
            });
        } else if (elem.status == 1) {
            // Create and update uuid
            var event = new EventModel(elem);
            event.save(function (err, doc) {
                if (!err) {
                    elem.uuid = event._doc._id;
                    created.push(elem);
                }
            });
        } else if (elem.status == 2) {
              // Update
            EventModel.findOne({ _id: elem.uuid }, function (err, event) {
                event.save(function (err, doc) {
                    if (!err) updated.push({uuid:elem.uuid});
                });
            });
        }
    });
    // Notify client what are processed.
    // PROBLEM: created, deleted, updated are always empty!
    res.send({processed: {created: created, deleted: deleted, updated: updated}});
});

由于 mongoose 以异步方式执行 CRUD,因此响应 createddeletedupdated 始终为空。 有没有办法让猫鼬串联操作?

【问题讨论】:

标签: node.js mongoose synchronous restify


【解决方案1】:

如 cmets 中所述,您可以使用 npm async 模块。

或者,您可能更喜欢嵌套回调(但这可能会导致所谓的回调地狱,即许多嵌套回调)或利用 mongoose .then() 方法 - 请参阅http://mongoosejs.com/docs/promises.html

在这里你可以做..

EventModel.remove(args).then((removeResponse) => {
  return EventModel.findOne(args);
}).then((findResponse) => {
  // etc
})

这些请求将同步发生。

【讨论】:

    猜你喜欢
    • 2016-07-30
    • 2018-03-05
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2019-04-29
    • 2019-01-04
    相关资源
    最近更新 更多