回调地狱,if / else调用不同的回调

时间:2015-11-09 09:55:31

标签: node.js

我有一个像这样的功能:

MngService.getByKey(service, function(service) {
  if (service === null) return res.json(STATUS_ERROR);
  MngUser.login(login, pass, function(user) {
    if (user === null) return res.json(STATUS_ERROR);
    MngToken.replaceTokenForServiceIdAndUserId(service.id, user.id, function(token) {
      if (!token) return res.json(STATUS_ERROR);
      return res.json(STATUS_SUCCESS);
    });
  });
});

我想根据if / else测试更改MngUser.login功能。 我现在找到的唯一解决方案是:

var loginFunc;
if (something)
{
  loginFunc = function (login, pass, token, cb) {
    return MngUser.loginWithPassword(login, pass, cb);
  };
}
else {
  loginFunc = function (login, pass, token, cb) {
    return MngUser.loginWithToken(token, cb);
  };
}

MngService.getByKey(service, function(service) {
  if (service === null) return res.json(STATUS_ERROR);
  loginFunc(login, pass, token, function(user) {
    if (user === null) return res.json(STATUS_ERROR);
    MngToken.setSsoTokenForUserId(user.id, function(sso_token) {
      if (!token) return res.json(STATUS_ERROR);
      return res.json(STATUS_SUCCESS);
    });
  });
});

我想知道这样做是否合适,或者是否有更好的设计模式来处理Node.JS中的这种情况,因为我发现它有点难以阅读且容易出错

0 个答案:

没有答案