JavaScriptレベルが制限されたPHPバックグラウンドからのnode.jsを学んでいます。非同期アプローチによって暗示された考え方の変化を乗り越えたと思います。そして、私はそれが大好きです。
しかし、私の前の多くの人たちと同じように、私は「破滅のピラミッド」の具体的な意味をすぐに理解しました。
そこで、Async.js を適切に使用する方法を理解するために、これらの小さな「ダミー」ルートとビューを作成します。私は次のコードを書くのに最後の 5 時間を費やしました (もちろん何十回も書き直しました)。それは機能しますが、どうすればこのコードをよりシンプルに (冗長でなく、読みやすく、維持しやすく) できるのだろうかと思います。
私はウェブ上、特にここで多くのリソースを見つけましたが、常にあちこちで少しの情報を見つけました.
この時点で、async.apply で "bind" と "this" を使用して、ウォーターフォールによって呼び出される最後の 2 つの関数を短縮する必要があると推測しています。
問題は、オブジェクト「db」を定義して、「コレクション」メソッドを使用できるようにすることです(2番目の関数用)。
私は実際に Google で例を検索しましたが、「非同期ウォーターフォール バインド」(および私が試した多くのキーワードのバリエーション) を検索する簡単な例が得られないのは驚くべきことです。もちろん答えはありますが、この特定の問題に関連するものはないようです...または、おそらく、私はそれらを理解していません。
誰かがこれについて私を助けることができますか? 私は非常に感謝します。
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} ); }
}
);
}
);