を使用して非同期呼び出し (node + socket.io) のネストを削減しようとしてasync.waterfall
いますが、後で必要になるため、ウォーターフォールにパラメーターを追加する必要がありました。このコードはよりよく説明するかもしれません:
// 元のバージョン:
socket event: turn action
socket.on('turn action', function(gameId, turnAction, clientFn) {
socket.get('corp', function(err, corp) {
gameProvider.processTurnAction(gameId, corp.id, turnAction, function(err, msg, game) {
clientFn(msg, game);
});
});
});
// async.js バージョン
async.waterfall([
function(callback) {
socket.on('turn action', function(gameId, turnAction, clientFn) {
callback(null, gameId, turnAction, clientFn);
});
},
function(gameId, turnAction, clientFn, callback) {
socket.get('corp', function(err, corp) {
callback(null, gameId, turnAction, clientFn, corp);
});
},
function(gameId, turnAction, clientFn, corp, callback) {
gameProvider.processTurnAction(gameId, corp.id, turnAction, function(err, msg, game) {
clientFn(msg,game);
});
}
]);
目標は読みやすさでしたが、冗長なパラメーターの受け渡しが混乱を招くことがわかりました。async.waterfall を呼び出す前に変数を宣言し、後でチェーンで使用するために必要に応じてパラメーターを保存できることはわかっていますが、読みやすさには役立ちません。
これをよりエレガントにする方法はありますか?