Должен ли я использовать response.send () в блоке finally при написании облачных функций Google? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь понять использование обещаний с Google Cloud Functions немного лучше. Я только что узнал о «окончательном» методе обещаний, который вызывается после полного разрешения или отклонения всех обещаний в цепочке. В функции http является хорошей практикой помещать response.send () внутри метода finally?

В приведенном ниже коде для запроса http используется запрос-обещание-нативный. В первом .then () я вызываю parseSchedule, который использует cheriio web scraping api для l oop через некоторые данные и на веб-сайте, и добавляю его в массив scheduleGames (думаю, синхронно).

Я возвращаюсь из этого, а затем записываю эти данные на консоль в writeDB, но одну вещь, которую я заметил, я вижу, что журнал response.send () завершил выполнение до того, как увидел данные из scheduleGames в журнале. Это правильно?

Должен ли я использовать блок finally, как этот? Спасибо,

    const options = {
        uri: 'https://www.cbssports.com/nba/schedule/' + urlDate,
        Connection: 'keep-alive',
        transform: function (body) {
            return cheerio.load(body);
        }
    };

    return request(options)
    .then(parseSchedule)
    .then(writeSchedule)
    .catch((err) => console.log("there was an error: " + err))
    .finally(res.send("execution finished"));

    function parseSchedule($){

          const scheduledGames = [];

            $('tbody').children('tr').each((i, element) => {

                const gameTime = $(element).children('td').eq(2).find('a').text()
                const scheduledGame = { gameTime: gameTime};

                scheduledGames.push(scheduledGame);

        });

        return scheduledGames;
   }

    function writeDB(scheduledGames){
        console.log(scheduledGames);     
    }

}

1 Ответ

1 голос
/ 07 апреля 2020

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

...