在承诺范围之外发送连接范围之外的事件

我正在做一个婚介web应用程序,我使用ExpressJsRedisSocket.io

故事 :

  1. 我用你的用户名,任务名称和难度提交一个表单(用AJAX)

  2. 我循环所有与选定任务相关的团队,并确定哪一个可用

  3. 然后我想添加当前的“客户端”到一个频道(选定的团队),我想广播一条消息给频道的所有用户,如:

client.join(team); io.in(team).emit('matchmakingInProgress', teamData); 

事实是,我使用Promise为了避免大callback地狱,我没有访问这些variablesio和套接字,因为它们预先使用,我正在寻找一种方式来检索它们。

app.js

 var express = require('express'), app = express(), server = require('http').createServer(app), io = require('./events/sockets').listen(server), port = process.env.PORT || 8080 ; // other stuff here ... app.use(require('./controllers')); server.listen(port, function() { console.log('Listening on port ' + port) }); 

事件/ sockets.js

 var socketio = require('socket.io'); module.exports.listen = function(app) { io = socketio(app); io.on('connection', function(client) { console.log('Client connected...'); client.on('join', function(data) { console.log(data); var clientsCount = io.sockets.sockets.length; client.broadcast.emit('clientsCount', clientsCount); client.emit('clientsCount', clientsCount); }); client.on('disconnect', function() { console.log('Client disconnected...'); client.broadcast.emit('clientsCount', clientsCount); }); }); return io; } 

控制器/ matchmaking.js

 var express = require('express'), router = express.Router() ; router.post('/:name/:difficulty', function(req, res) { // Others functions function dispatchTeamCompletionInProgress(teamData) { io.join(teamData.name); client.in(teamData.name).emit('matchmakingInProgress', teamData.length); } matchmakingService .getTeamsRelatedToAskedMission() .then(getTeamsLength) .then(getAvailableTeam) .then(addPlayer); .then(dispatchTeamCompletionInProgress); // <--- At this moment I want to emit a message }); module.exports = router;