javascript - Node.js 如何进行条件回调?

标签 javascript node.js

我仍在努力解决 Node.js 的嵌套回调结构。我看过 async、co 等方法,但它们似乎没有帮助。

关于如何编码的最佳实践是什么,例如

var db = MongoClient.connect(url, callback1 () {
   if (auth) }
      db.authenticate(user, pswd, callback2 () {
      --- should continue with db.collection.find (authenticated)
   )
   --- should continue with db.collection.find (non-authenticated)
}

所以问题是:我应该如何编码这个序列才能执行 db.connect 或 db.authenticate 之后的数据库调用(并且两个回调都完成)?我能想到的唯一方法是在一个单独的函数中进行以下数据库调用,并在两个回调例程中调用该函数。不太优雅......

最佳答案

如果您对如何在回调之前放置可选条件感到困惑,那么您可以使用异步执行以下操作:

var async = require('async');

var db = MongoClient.connect(url, () => {
    async.series([
        (callback) => {
            //Branching
            if(auth) {
                // Do conditional execution
                db.authenticate(user, pswd, () => {
                    callback();
                });
            } else {
                // Skip to the next step
                callback();
            }
        },
        (callback) => {
            // Whatever happened in the previous function, we get here and can call the db
            db.collection.find();
        }
    ]);
});

关于javascript - Node.js 如何进行条件回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397002/

相关文章:

node.js - 使用 inversify-express-utils,我如何集成 websocket?

node.js - Windows上的npm安装jsdom错误?

javascript - 通过在 Javascript 中添加/删除类来更改图像。在初始页面滚动= 0 时怎么样?

javascript - Gruntfile.js 任务无法读取包值?

javascript - 在另一个函数内部调用函数

php - Codeigniter - 在特定 View 上加载特定的 JS 库

javascript - Node.js websocket-server 和 tcp-server 连接

node.js - RabbitMq 中的 assertQueue 和 send To Queue 有什么区别

javascript - javascript/node.js 中的 JSONP 解析

javascript - 使用 jQuery 的多重选择器