Повторите попытку Google Cloud на произвольном интервале - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть приложение Google Cloud с несколькими облачными функциями, которые вызывают API, а затем сохраняют ответ в Firebase. Я настроил эту запланированную функцию для повторного запуска API в случае ошибки, и она прекрасно работает. Но я хочу повторить вызов, если нужных мне данных еще нет. Повторный вызов сразу может сработать, если я выдам ошибку, но маловероятно, что недостающие данные будут доступны через несколько секунд, поэтому я бы предпочел проверять их раз в час, пока у меня не появятся действительные данные.

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

exports.fetchData= functions.pubsub
    .schedule('every Tuesday 6:00')
    .timeZone('America/New_York')
    .onRun(async context => {
            const response =  fetch(...)
            .then(res => {
                if (res.status < 400) {
                    return res;
                } else {
                    throw new Error(`Network response was not ok. ${res}`);
                }
            })
            .then(res => res.json());

        const resObj = await response;

        resObj.map(x => {
            // check response for valid data
        })

        if (// data is valid) {
          // save to Firebase 
        } else {
          // retry in 1 hour
        }
    });
});

1 Ответ

1 голос
/ 02 ноября 2019

Запланированные функции запускаются только по заданному вами расписанию. Нет «произвольного» планирования. Если вы считаете, что функция часто может давать сбой, рассмотрите возможность увеличения частоты расписания и освобождения от вызовов функций, которые не нужно запускать из-за недавнего успеха.

Если вы включите повторные попытки, и функция генерирует ошибку, выдавая исключение, возвращая отклоненное обещание или время ожидания, затем Cloud Functions автоматически повторяет функцию по расписанию, которым вы не можете управлять.

setTimeout isнеосуществимый вариант, чтобы поддерживать функцию дольше, чем настроенное время ожидания. Облачные функции прекратят выполнение функции и всей ее текущей работы после истечения времени ожидания (и вы будете платить за время простоя функции, что является пустой тратой).

...