Как действительно завершить функцию? - PullRequest
0 голосов
/ 16 октября 2019

Прочитав много, кажется, что я (как и другие) не могу понять, что на самом деле завершает функцию и когда вам следует ее использовать. Отправка, ответ, перенаправление, завершение, возврат и их сочетание.

Согласно Google:

Always end an HTTP function with send(), redirect(), or end()

Теперь во многих вопросах здесь я читал, что response завершит ваш HTTPфункция также. Обещание будет держать его бодрым.

Я был бы рад понять, что делает эта функция:

 exports.server = functions.https.onRequest((request, response) => {
  1. response.status (200);
  2. response.status (200) .end ();
  3. return
  4. return response.redirect (someURL);
  5. sendStatus (200);
  6. response.status (200) .send (словарь)

Когда вы будете использовать каждый из них, и это прекратит функцию.

Это просто слишком запутанно, и нет никакого организованного документа, кроме нескольких предложений, в которых говорится, что вы должны прекратить функцию.

РЕДАКТИРОВАТЬ : Теперь это еще более запутанно, когда я читаюздесь response не не завершает функцию, и вы можете делать после вашего response, но вы не можете редактировать response само по себе потому что оно закончилось. Так ответ завершает функцию ?? все действительно не ясно. Почему я могу выполнить код после "res.send"?

1 Ответ

1 голос
/ 16 октября 2019

Поскольку вы отвечаете на HTTP-запрос, вы обязательно должны использовать send() с или без status(), прежде чем отправлять HTTP-ответ, НО (и вы это указали), это не остановит выполнение остальной части скрипта.

Таким образом, вы должны быть очень осторожны при написании потока if/then/else, чтобы send() нельзя было вызывать несколько раз.

Самый безопасный способ, на мой взгляд, также всегда завершать каждую часть кода return true или return false после вызова send().

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