【问题标题】:Socket.io not always workingSocket.io 并不总是有效
【发布时间】:2015-12-04 04:59:25
【问题描述】:

我正在使用一些模块,除了 socket.io 并不总是有效的事实之外,一切都已就位......

我们已经在 Socket.io 中使用了一些“路线”,它们都运行良好并且每次都能正常运行!

但是现在,我们要推出一个新的
'order/new',应该显示每个新订单。

创建了一个新订单,通过队列发送一条消息,我们通过 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))
                }
            });
    }

正面(反应):

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
    }
});

如果需要更多信息,请在下面的 cmets 中说明 一切都是最新的(Node.js、React.js、Socket.io 等)

【问题讨论】:

    标签: javascript node.js socket.io reactjs


    【解决方案1】:

    我发现 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
                }
        });
    

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2015-06-28
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多