Возврат немедленно из `call (env)` после предоставления ответа - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть приложение веб-сервера Rack для проверки в call(env) предоставленной строки HTTP-запроса и немедленного возврата различных ответов (с соответствующим значением erb), если эти биты проверки не пройдены.

Я звоню по следующемуметод для получения ответа:

def respond(http_status, http_headers, html_body = '')
  # Provide HTTP response
  html_body = yield if block_given?
  [http_status, http_headers, [html_body]]
end

, который я почерпнул из Интернета.

Затем я вызываю respond(...) из разных точек в моем call(env) методе, примерно так:

def call(env)
  case blah
    when '/'
      if validation_a_fails
        respond(invalid_a)
      else
        set up a variable for later use...
      end
      if validation_b_fails
        respond(invalid_b)
      else
        set up another variable for later use...
      end
      if validation_c_fails
        respond(invalid_c)
      else
        set up something else for later use...
      end
    else # not root url
      respond(404_situation)
    end
  end
end

Я ожидал, что вызов respond(invalid_a) немедленно завершит вызов метода.Однако это не так.Вместо этого выполняются остальные методы вызова.

Как я могу заставить respond(...) немедленно вернуться в вызывающий браузер?

1 Ответ

0 голосов
/ 16 декабря 2018
if validation_a_fails
  return respond(invalid_a)
else

в вашем случае вы не можете пропустить return, потому что у вас есть несколько if-else с, чтобы они проходили через них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...