2015-09-08 6 views
0

Я работаю с несколькими модулями и все Inplace КРОМЕ за то, что Socket.io не всегда работает ...Socket.io не всегда работает

У нас есть несколько «маршрутов» мы уже используем в Socket.io, которые работают отлично и работают каждый раз!

Но теперь мы вводим новый
'заказать/новый', который должен отображать каждый новый заказ.

Создан новый заказ, сообщение отправляется по очереди, мы возвращаем его через запрос GET, и мы отправили его пользователю с Socket.io.

Но функция испускания не всегда «испускает» (?!) ... Может ли кто-нибудь мне помочь?

Сервер:

io.on('connection', function (socket) { 
    // somewhere else calls this function, nothing wrong here... 
    function (mes) { 
     console.log('New order received: ', mes); 
     var doc_id = JSON.parse(mes)._id; 
     request 
      .get(urls['order/get'].replace(':id', doc_id)) 
      .end(function (err, res) { 
       console.log(err); 
       if (res.ok) { 
        console.log(chalk.green('OK: [GET] - ORDER/GET - ORDER_ID: ' + doc_id)); 
        // The above console.log get's called, so still working... 
        socket.emit('order/new', res.body); 
        // THIS socket.emit is called randomly, it doesn't work everytime... 
       } else { 
        console.log(chalk.red('ERROR: [GET] - ORDER/GET - ' + res.text)) 
       } 
      }); 
    } 

фронт (React):

var OrdersViewer = React.createClass({ 

    setNewOrder (order) { 
     console.log("new order gotten nr.", this.state.orders.length); 
     // this doesn't always get called... 
     var orders = _.cloneDeep(this.state.orders); 
     orders.push(order); 
     this.setState({orders}); 
    }, 

    componentDidMount() { 
     socket.on('order/new', this.setNewOrder) 
    }, 

    render() { 
     // renders stuff 
    } 
}); 

Если больше информации необходимо, пожалуйста, так сказать в комментариях ниже Все до настоящего времени (Node.js, React.js, Socket.io и т. Д.)

ответ

0

Я вижу одну проблему с setNewOrder.

var OrdersViewer = React.createClass({ 

      setNewOrder (order) { 
        console.log("new order gotten nr.", this.state.orders.length); 
        // this doesn't always get called... 
        var orders = _.cloneDeep(this.state.orders); 
        orders.push(order); 
        //this.setState({orders}); 
        this.setState({orders: orders}); 
      }, 

      componentDidMount() { 
        socket.on('order/new', this.setNewOrder) 
      }, 

      render() { 
        // renders stuff 
      } 
    }); 
+0

Проблем нет, что работает;) – CreasolDev

Смежные вопросы