2016-10-15 2 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 보석을 사용하고 있습니다. @maxpleaner. 해결 방법을 찾고 있습니다. 내가 생각할 수있는 가장 해킹 방법은 콜백이 호출 될 때까지'async_method' 호출 후에 휴면 상태를 유지하는 것입니다. 그러나 더 좋은 방법이 있어야합니다. – villy393

답변

0

결국 해결책을 찾을 수있었습니다. 내가 사용했던 보석은 Celluloid::Future을 반환했습니다. future_object.value으로 전화하면 값을받을 때까지 실행이 차단됩니다.

0

PubNub 루비 SDK http_sync

난 당신이 바로 그 때 당신 publish, subscribe '등 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

관련 문제