2016-10-15 8 views
1

私は、非同期的に処理する宝石のメソッドを呼び出す状況があります。メソッドが呼び出されたスレッドで実行を続行する前にコールバックが呼び出されるのを待つことができます。非同期呼び出しを戻す方法は同期的に処理されます

gem.async_method(args) do |result| 
    # the callback 
end 
# wait until callback is called and then continue execution 
puts result # somehow have access to the result from the callback 
+1

どのような宝石を使用していますか? –

+1

私はそれが非同期メソッドを同期的に呼び出すことはできないという「ルール」のようなものだと思います。 –

+0

@AlexPan私はpubnub gemを使用しています。 @maxpleaner。私は回避策を探しています。私が考えることができるもっとも一番の方法は、 'async_method'コールの後でコールバックが呼び出されるまでスリープすることです。しかし、もっと良い方法があるはずです。 – villy393

答えて

0

最終的にこれに対する解決策を見つけることができました。私が使っていた宝石は、Celluloid::Futureを返しました。 future_object.valueを呼び出すと、値が受信されるまで実行がブロックされます。

0

PubNub RubyのSDK http_sync

私はあなたがちょうどその時あなたpublishsubscribe」などPubNub http_syncパラメータを探していると思います。 https://www.pubnub.com/docs/ruby/api-reference-sdk-v4#publish_args

pubnub.publish(
    channel: 'my_channel', 
    message: { text: 'Hi!' }, 
    http_sync: true 
) do |envelope| 
    puts envelope.status 
end 
+0

すべてがこのフラグを持っているわけではありません。 '存在'呼び出しのように。 – villy393

+0

プレゼンスは短命ではなく長期間実行されています。 –

+0

ええ、私は知っているが、それは私がサーバーの認証キーを使用している間に加入者の数を見るために一度のリクエストを行う唯一の方法です – villy393

関連する問題