1

这就是我目前从 mongodb 获取数据的方式:

users.get(base_URL, (req, res) => {
    UserModel.find({}, (err, docs) => {
        res.render("Users/index", {
            title: "All Users here",
            user_list: docs
        });
    });
});

现在,如您所见,这是一个快速应用程序。我想要的是简单地调用一个函数,以便我可以从docsmongodb 模型回调中的变量中获取值。我该怎么做,理想情况下,我想看到这样的东西:

users.get(base_URL, (req, res) => {
    res.render('<some_jade_file_here>', {
            title: "Yes, got it right",
            user_list: getAllUsers();
        });
});

理想情况下,我只想调用一个函数。我该怎么做,因为必须将渲染放在 mongodb 调用中是一个问题,因为您可能想从数据库中查询一堆东西,它甚至可能不仅仅是一个数据库。我有点挣扎,因为我不习惯回调。

任何帮助将不胜感激。如果你想知道这个语法() => {},那只是打字稿中的一个匿名函数。

4

1 回答 1

1

没有回调就无法做到这一点,但可以使用异步流控制库async来帮助管理回调嵌套。在这种情况下,您可能想要使用async.parallel.

使用它,您可以执行以下操作:

users.get(base_URL, (req, res) => {
    var data = {
        title: "Yes, got it right"
    };
    async.parallel([
        (callback) => {
            UserModel.find({}, (err, docs) {
                data.user_list = docs;
                callback(err);
            });
        },
        (callback) => {
            // Other query that populates another field in data
        }
    ], (err, results) => {
        // Called after all parallel functions have called their callback
        res.render('<some_jade_file_here>', data);
    });
});
于 2013-08-28T13:57:26.720 回答