2016-06-10 81 views
-1

对于NodeJS我还是比较新的。我意识到我需要将下面的代码放在回调中,以便我可以等待数据库调用完成,但我看不出如何使其工作。NodeJs需要在回调函数中包装函数

我需要我的结果返回到被标在这段代码底部的父功能:

exports.gtoken = function(req, sfinfo) { 
var outcome = {}; 
req.app.db.models.Account.findById(req.user.roles.account.id, 'isVerified extraemail search memberid name').exec(function(err, account) { 
    if (err) { 
    return console.error(err + 'issue'); 
    } 
    outcome.account = account; 
    var memberid = JSON.stringify(outcome.account); 
    var g = (new Date().getTime())/1000; 
    var n = (g + 86400); 
    var memberid = outcome.account.memberid; 
    var secondaryemails = outcome.account.extraemail; 
    var isVerified = outcome.account.isVerified; 
    var IDName = outcome.account.name; 
    var payload = { 
     "email": req.user.email , 
     "exp": n, 
      "iss": req.app.locals.issid , 
      "userid": req.user.id , 
      "signedin": 'true' , 
      "memberid": memberid , 
      "secondaryemails": secondaryemails , 
      "isVerified": isVerified , 
      "IDName": IDName , 
      "sfinfo": sfinfo, 
     }; 
    var token = jwt.encode(payload, req.app.config.cryptoKey, 'HS512'); 
console.log(token); 
return token; 
}); 
// I need to return my result here to the parent function 
}; 
+1

我们怎么知道什么“不工作”特别? – zerkms

+0

抱歉,我在返回后在控制台中得到令牌。 – scottmont

+0

好吧,那么?你已经掌握了控制台?把它放在控制台上是你正在谈论的问题? – zerkms

回答

2

如果没有更多的细节,这是很难猜到这是什么方法做的和你期望什么价值被退回。

但是,我相信,你正试图用这种方法得到令牌。因此,这里就是你可能会寻找:

exports.gtoken = function(req, sfinfo, callback) { 
    req.app.db.models.Account.findById(req.user.roles.account.id, 'isVerified extraemail search memberid name').exec(function(err, account) { 
     if (err) { 
      callback(err, null); 
     } else { 
      var outcome = {}; 
      outcome.account = account; 
      var memberid = JSON.stringify(outcome.account); 
      var g = (new Date().getTime())/1000; 
      var n = (g + 86400); 
      var memberid = outcome.account.memberid; 
      var secondaryemails = outcome.account.extraemail; 
      var isVerified = outcome.account.isVerified; 
      var IDName = outcome.account.name; 
      var payload = { 
       "email": req.user.email, 
       "exp": n, 
       "iss": req.app.locals.issid, 
       "userid": req.user.id, 
       "signedin": 'true', 
       "memberid": memberid, 
       "secondaryemails": secondaryemails, 
       "isVerified": isVerified, 
       "IDName": IDName, 
       "sfinfo": sfinfo, 
      }; 
      var token = jwt.encode(payload, req.app.config.cryptoKey, 'HS512'); 
      callback(null, token); 
     } 
    }); 
}; 

这里是你如何可以使用方法:

gtoken(req, sfinfo, function(err, token) { 
    if (err) { 
     console.error(err + 'issue'); 
    } else { 
     console.log(token); 
    } 
}); 
+0

一个字:承诺 – zerkms

+0

一个在工作的人不断告诉我有关承诺。我会现在谷歌。 – scottmont

+0

非常感谢杰森我正在尝试它。 – scottmont