私はnodeを使い始めたばかりですが、すぐに気付いたのは、コールバックが愚かなレベルのインデントまでどれだけ速く構築できるかです。
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
公式のスタイルガイドは別の関数内の各コールバックを置くことを言いますが、それは、オブジェクトがすべてを通過する必要があるように、単一のオブジェクトは、利用可能ないくつかの層下にトップレベルで宣言されたクロージャの使用に過度に制限的と思われる、となってい中間コールバック。
ここで助けるために関数スコープを使用しても大丈夫ですか?グローバルっぽいオブジェクトへのアクセスを必要とするすべてのコールバック関数を、そのオブジェクトを宣言する関数の中に置いて、クロージャーに入りますか?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
など、さらにいくつかのレイヤーについて...
または、すべてのコールバックごとに名前付き関数を宣言せずにインデントのレベルを下げるのに役立つフレームワークなどはありますか?コールバックピラミッドをどのように扱いますか?