Javascript RubySocket.IO回调
我正在使用并试图用Ruby复制这段JS代码,但运气不好。JS代码按预期工作,但Ruby版本不会在“auth”emit上生成回调输出“Authentication successful” 虽然Ruby中的auth是成功的,因为我可以在auth之后发出其他私有方法。唯一的问题是为什么回调不起作用 JSJavascript 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
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包装的一个限制