Как сделать сообщение JSON перед возвращением из функции - PullRequest
0 голосов
/ 30 марта 2019

Как вывести сообщение json непосредственно перед возвратом?

С помощью следующего кода оно возвращается после завершения последней функции:

def create_company
    begin
      company = current_user.company
      result = company.create_users
      render(json: {message: result[0]}, status: :ok)
      company.send_email(result[1])
    rescue => e
      render(json: { error: e.message }, status: :unprocessable_entity)
   end
end

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

1 Ответ

1 голос
/ 30 марта 2019

Если это метод контроллера, вам нужно, чтобы render был последним вызовом, а не company.send

def create_company
    begin
      company = current_user.company
      result = company.create_users
      company.send_email(result[1])
      render(json: {message: result[0]}, status: :ok)
    rescue => e
      render(json: { error: e.message }, status: :unprocessable_entity)
   end
end

edit Основываясь на ваших комментариях,Я вижу, что вы хотите, чтобы работа с электронной почтой прекратилась после рендеринга.Для этого вам нужно настроить асинхронную службу.В зависимости от того, используете ли вы рельсы и какую версию, вы можете использовать ActiveJob .Сам по себе это процесс настройки, если вы никогда не делали этого раньше, поэтому вам нужно прочитать об этом.

Ваш метод контроллера будет выглядеть следующим образом

def create_company
    begin
      company = current_user.company
      result = company.create_users
      company.send_email(result[1]).deliver_later
      render(json: {message: result[0]}, status: :ok)
    rescue => e
      render(json: { error: e.message }, status: :unprocessable_entity)
   end
end

deliver_later - это метод активной работы, который можно вызвать при отправке электронного письма, если у вас настроена активная работа.

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