在
searchPlayer函数中,
next()应将调用放置在所调用的回调函数中
searchPlayers(),基本上与您对该
searchTeam()函数所做的完全相同。
function searchTeam(req, res, next){ searchModuleTeams.searchTeams(req.body, function(data) { req.teams = data; next(); });}function searchPlayer(req, res, next){ req.players = [];<--- uncomment this... req.teams.forEach(function(team){ req.body = {searchTerm:team._source.shortName}; searchModulePlayers.searchPlayers(req.body, function(data){ req.players.push(data); <--- ...otherwise this will fail next(); <--- move next() here }); });}function renderResults(req, res){ res.render('index',{ title:'Search Teams and Players', teams:req.teams, players:req.players });}router.post('/search-tp',searchTeam, searchPlayer, renderResults);而且,正如TalhaAwan所建议的那样,您最好不要在中间件中执行此操作,而应使用专用的库,例如
async一个(但还有很多)
import waterfall from 'async/waterfall';function searchTeam(callback){ searchModuleTeams.searchTeams(req.body, function(teams) { callback(null, teams); });}function searchPlayer(teams, callback){ let teamPlayers = []; async.each(teams, function(team, teamCallback) { let search = {searchTerm: team._source.shortName}; searchModulePlayers.searchPlayers(search, function(players){ teamPlayers.push(players); teamCallback(); }); }, function(err) { callback(err, teams, teamPlayers); });}function renderResults(req, res){ async.waterfall([ searchTeam, searchPlayer ], function (err, teams, players) { res.render('index',{ title:'Search Teams and Players', teams: teams, players: players }); });}router.post('/search-tp', renderResults);


