当前位置 : 主页 > 网页制作 > Nodejs >

node.js中的async.js瀑布:如何使用bind和this?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我正在学习来自具有有限 JavaScript级别的PHP背景的node.js.我想我现在已经克服了异步方法隐含的思维方式的变化.我喜欢它. 但是,正如我之前的许多其他人一样,我很快就明白了“厄运金字
我正在学习来自具有有限 JavaScript级别的PHP背景的node.js.我想我现在已经克服了异步方法隐含的思维方式的变化.我喜欢它.

但是,正如我之前的许多其他人一样,我很快就明白了“厄运金字塔”的具体含义.

所以我构建了这些小的“虚拟”路径和视图,以了解如何正确使用Async.js.我只花了最后5个小时写下面的代码(当然重写了几十次).它有效,但我想知道如何进一步使这段代码更简单(更简洁,更易于阅读和维护).

我在网上找到了很多资源,特别是在这里,但总是在这里和那里提供一些信息.

我在这一点上猜测我应该使用“bind”和“this”与async.apply来缩短瀑布调用的最后两个函数.

问题是定义对象“db”,所以我可以使用“collection”方法(对于第二个函数).

我真的在谷歌中搜索了一个例子,但令人惊讶的是你没有得到“async waterfall bind”的简单例子(以及我尝试过的许多关键字变体).当然有答案,但似乎没有一个与这个特定的问题相关……很可能,我还没有理解它们.

有人可以帮我吗?我将非常感激.

app.get('/dummy',

    function(req, res) {

        var MongoClient = require('mongodb').MongoClient;

        async.waterfall(
            [
                async.apply(MongoClient.connect, 'mongodb://localhost:27017/mybdd'),

                function(db, callback) {
                    db.collection('myCollection', callback);
                },

                function(collection, callback) {
                    collection.find().sort({"key":-1}).limit(10).toArray(callback);
                }

            ], function(err, results) {
                if (err) console.log('Error :', err);
                else { res.render('dummy.jade', { title:'dummy', results: results} ); }
            }
        );

    }

);
如果你使用 mongodb JS Driver,那么这应该工作:

async.waterfall(
            [ 
             function (cb) {
               new MongoClient(...)
               .connect('mongodb://localhost:27017/mybdd', cb);
             },

             function (db, callback) {
               db.collection('myCollection', callback);
             },
...

或者,如果要使用async.apply,只需传递MongoClient的实例即可

async.apply(new MongoClient(...).connect, 'mongodb://localhost:27017/mybdd')
网友评论