为什么这个循环会破坏我的代码?

时间:2017-11-09 18:04:11

标签: javascript socket.io

公平警告,我是javascript和ool的新手。我试图整理一个简单的脚本来解析数据到Web套接字。该脚本应该能够处理无限数量的有效负载。

此代码有效,但一次只能处理有效负载:

#!/usr/bin/env node 
var io = require('socket.io-client');
var i=1

socket = io.connect('http://10.0.9.1:80');
var data = JSON.parse(process.argv[2]);
socket.on('connect', function(){
    console.log('Emitting');
    socket.emit('widget', data);
    process.exit(0);
});

使用逻辑测试将代码包装在一个循环中会破坏它。没有语法错误,但它似乎没有调用emit方法。

#!/usr/bin/env node 
var io = require('socket.io-client');
var i=1
var data

while (true) {
    i++
    if ( process.argv[i] ) {
    socket = io.connect('http://10.0.9.1:80');
    data = JSON.parse(process.argv[2]);
    socket.on('connect', function(){
        console.log('Emitting');
        socket.emit('widget', data);
    });
    } else {
        process.exit(0);
    };
};

2 个答案:

答案 0 :(得分:1)

您正在创建的套接字是异步的,因此您最终会创建一堆套接字,然后在建立连接之前调用process.exit(0)

答案 1 :(得分:0)

我的第一次尝试有很多错误。来自ControlAltDel和mrid的线索让我意识到我的循环结构都是错误的。循环应该放在on(' connect')中,如下所示:

#!/usr/bin/env node
var io = require('socket.io-client');
var i=1
var data

socket = io.connect('http://10.0.9.1:80');

socket.on('connect', function(){
    while (true) {
        i++;
        if ( process.argv[i] ) {
            data = JSON.parse(process.argv[i]);
            console.log('Emitting ');
            socket.emit('widget', data);
        } else {
            process.exit(0);
        };
    } 
});