как произвести задержку рубина

Как произвести задержку рубина?

Я использовал оператор сна, но он не дал мне, что я хочу.

puts "amit"
sleep(10)
puts "scj"

Я хочу, чтобы это сначала распечатало amit, затем задержка 10 секунд, затем распечатало scj.

Но в вышеупомянутом случае, что происходит, это, приостановится в течение 10 секунд, и затем это распечатает amit и scj вместе. Я не хочу это.

Я надеюсь, что Вы получили то, что я хочу сказать.

9
задан sepp2k 21 June 2010 в 12:00
поделиться

2 ответа

Я не могу воспроизвести это. С консоли это делает именно то, что вы ожидаете:

puts "amit"
sleep 10
puts "scj"

(Ruby 1.8.6 в Linux)

Можете ли вы предоставить аналогичный короткий, но полный пример, который не делает то, что вы хотите - или более подробно объясните свой контекст?

Если вы пишете веб-приложение, тогда браузер может видеть какие-либо данные только после того, как будет написан весь ответ - это объяснило бы то, что вы видите. В этом случае вам понадобится другой подход, который позволит сначала написать первоначальный ответ, а затем заставить браузер сделать еще один запрос. Задержка может быть на сервере или на клиенте, в зависимости от сценария.

9
ответ дан 4 December 2019 в 12:16
поделиться

Вызовите $stdout.flush перед вызовом sleep. Вероятно, вывод буферизован (хотя обычно вывод буферизован только по строкам, поэтому puts, который выдает новую строку, должен работать без промывки, но, видимо, для вашего терминала это не так).

8
ответ дан 4 December 2019 в 12:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: