我试图通过使用来减少异步调用(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 之前声明变量并根据需要存储参数以供以后在链中使用,但这对可读性没有帮助。
有没有办法让它更优雅?