【问题标题】:Node Mongoose MongoDb and asynchronicity节点 Mongoose MongoDb 和异步性
【发布时间】:2014-12-04 11:39:33
【问题描述】:

希望有一个比我多一点知识的人问一个简短的问题。

如果我在 Node api 实现中有代码,它基本上创建一个实体并使用 Mongoose 将其直接保存到 MongoDB,我是否需要将所有这些包装在一个 Promise 库中以使其尽可能异步?或者 Mongoose/MongoDB 节点库的实现是否已经以异步方式完成它们的工作,所以我在消息泵上的唯一开销是对象创建。

下面的代码是我们在 API 中的代码,它在下面创建承诺并执行它,我只是想知道如果 Mongoose/MongoDB 库无论如何都是异步的,承诺的开销是否真的值得。

希望这一切都有意义。

function action(promise) {
    var date = new Date(),
    taskWorkQueue = new TaskWorkQueueModel({
            "TaskId": taskid,
            "metadata": metadata,
            "State": 0,
            "TaskType": taskType,
            "ApplicationName" : token.ApplicationName ,
            "dateEntered": date});
    taskWorkQueue.save(function (err) {
        if (err)
        {
            promise.reject(err);
        }
        else
        {
            promise.resolve(taskWorkQueue);
        }

    });

【问题讨论】:

    标签: node.js mongodb asynchronous mongoose


    【解决方案1】:

    这不是将这些东西包装在承诺中的原因。所有好的节点库(如 Mongoose)已经是异步的。使用 Promise 只是为您提供了另一种编写代码的方法,而不是使用回调。

    看看documentation for q,他们展示了一个例子,说明你可以从承诺和回调中获得什么样的编码风格差异。

    step1(function (value1) {
        step2(value1, function(value2) {
            step3(value2, function(value3) {
                step4(value3, function(value4) {
                    // Do something with value4
                });
            });
        });
    });
    

    Q.fcall(promisedStep1)
    .then(promisedStep2)
    .then(promisedStep3)
    .then(promisedStep4)
    .then(function (value4) {
        // Do something with value4
    })
    .catch(function (error) {
        // Handle any error from all above steps
    })
    .done();
    

    值得一提的是,mongoose 已经通过mpromise 支持承诺,您不需要自己包装它们。还有一些可用的库使用其他关于 mongoose 的 Promise 框架,例如 mongoose-q

    【讨论】:

    • 感谢 Timothy,来自 C# async 我犯了一个错误,认为 Promise 实际上是作为单独的(线程/纤维/东西)运行的。我现在看到它基本上是回调的语法糖,在 C# 中提供了一些看起来像基于异步的任务延续的东西。感谢您的澄清,非常感谢。
    猜你喜欢
    • 2014-09-08
    • 2014-04-25
    • 2018-06-15
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    相关资源
    最近更新 更多