Javascript RubySocket.IO回调

Javascript RubySocket.IO回调,javascript,ruby,callback,socket.io,Javascript,Ruby,Callback,Socket.io,我正在使用并试图用Ruby复制这段JS代码,但运气不好。JS代码按预期工作,但Ruby版本不会在“auth”emit上生成回调输出“Authentication successful” 虽然Ruby中的auth是成功的,因为我可以在auth之后发出其他私有方法。唯一的问题是为什么回调不起作用 JS var ws = io('https://test.com') ws.on('connect', function () { auth(ws, pubKey, secKey, functio

我正在使用并试图用Ruby复制这段JS代码,但运气不好。JS代码按预期工作,但Ruby版本不会在“auth”emit上生成回调输出“Authentication successful”

虽然Ruby中的auth是成功的,因为我可以在auth之后发出其他私有方法。唯一的问题是为什么回调不起作用

JS

var ws = io('https://test.com')

ws.on('connect', function () {
    auth(ws, pubKey, secKey, function (err, auth) {
        if (err) return console.error('Error', err);
        if (auth.success)
            console.log('Authentication successful');
        else
            console.log('Authentication failed');
    });
});

function auth(ws, pubKey, secKey, cb) {
    var data = { apiKey: pubKey, cmd: 'getAuthInfo', nonce: Date.now() };
    var sig = crypto.sign(data, secKey);
    ws.emit('auth', data, sig, cb);
}
红宝石

require 'socket.io-client-simple'
require 'date'

ws = SocketIO::Client::Simple.connect 'https://test.com'

socket.on :connect do
   auth(ws, pubKey, secKey, method(:auth_callback))
end

def auth(ws, pubKey, secKey, cb)
   data = { apiKey: pubKey, cmd: 'getAuthInfo', nonce: DateTime.now }
   sig = Crypto.sign(data, secKey)
   ws.emit :auth, [data.to_json, sig, cb]
end

def auth_callback(err, auth)
   if auth.success
      puts 'Authentication successful'
   end
end

auth\u callback
不会被调用,因为您没有在任何地方调用它

将方法
method(:auth\u callback)
作为名为
cb
的参数传递给
auth
方法,但不使用
cb
执行任何操作

cb
是一个,因此您可以在其上使用

没有足够的数据来测试代码,因此下面是一个基本示例:

cb=3.method(:+)
cb.call(2)
#=> 5

err
既没有定义也没有使用,所以您可以将其从
def auth_回调(err,auth)
中删除。谢谢,我明白您的意思,但看起来,我实际上无法在ruby中获得emit方法的响应,就像在js中一样。看起来这是socket.io-client-simple包装的一个限制