Я пытаюсь понять использование обещаний с 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);
}
}