我学习 node.js 的背景是 PHP,JavaScript 水平有限。我想我现在已经克服了异步方法所暗示的思维方式的改变。我喜欢它。
但是,和我之前的许多人一样,我很快就理解了“厄运金字塔”的具体含义。
所以我构建了这些小的“虚拟”路由并查看以了解如何正确使用 Async.js。我只是花了最后 5 个小时来编写以下代码(当然重写了数十次)。它有效,但我想知道如何才能更进一步并使这段代码更简单(不那么冗长,更易于阅读和维护)。
我在网上找到了很多资源,尤其是在这里,但总是到处都是一些信息。
此时我猜测我应该将“bind”和“this”与 async.apply 结合使用来缩短 waterfall 调用的最后两个函数。
问题是要定义对象“db”,这样我就可以对其使用“collection”方法(用于第二个函数)。
我确实在 Google 中搜索了一个示例,但令人惊讶的是您没有找到简单的示例来寻找“异步 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')
关于node.js - node.js 中的 async.js waterfall : how to use bind and this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624938/