将function传递给下一个function,根据条件进行激活。 的NodeJS
我使用express.js来创build一个node.js REST服务器,作为一个部分,我也创build了一个简单的会话系统。 我有3个模块:
- app.js
- highscoreMan.js
- userSession.js
http://localhost/api/highscores
的app.jsurl现在使用给定的参数调用userSession:
//Get all highscores app.get('/api/highscores', function (req, res) { userSession.checkValidity(req.query['username'], req.query['sessionid'], highscoreMan.getAll(req, res)); });
但是,在checkValidity中,我通过的函数被自动调用:
function checkValidity(username, sessionId, callback) { userSession.findOne({ userid: username, sessionid: sessionId }, function (err, result) { if (err) { console.log(err); } if(result) { callback; } }); }
我只想运行正在传递的函数,因为我从数据库中获得了正确的结果(其他检查将稍后添加会话date等)。 我将如何做到这一点?
要延迟调用highscoreMan.getAll()
,您需要使其成为可以稍后调用的另一个function
的语句:
app.get('/api/highscores', function (req, res) { userSession.checkValidity(req.query['username'], req.query['sessionid'], function () { highscoreMan.getAll(req, res); }); });
否则,它被立即调用,它的return
值被传递给userSession.checkValidity()
。
请注意,您还需要调整checkValidity
以调用传递的callback
:
// ... if(result) { callback(); } // ...
除非我不完全了解你的问题,你不能就这样做吗?
if (result && some_validator(result)) { callback(); }