Загрузка файла Firebase Bucket занимает много времени - PullRequest
0 голосов
/ 15 октября 2018

Я разрабатываю приложение с использованием Firebase в качестве BaaS.

У меня проблемы со временем, когда я загружаю изображение (размером не более 90 КБ) и запускаю функцию облака.

Мой триггер запускается после завершения загрузки:

exports.uploadControl = functions.storage.object().onFinalize((req, res) => {
    uploadControl.handler(req, res);
    return 0;
});

А внутри uploadControl у меня есть:

return mkdirp(tempLocalDir).then(() => {
    console.log('1. mkDirp - OK!');
    console.log('2. Download starts...');
    return bucket.file(filePath).download();
}).then((content) => {
    console.log('3. Download ends');
    return 0;
});

Этот код работает нормально, но проблема в том, что время, проведенное между шагами 2 и 3, занимает 24 с или более.

Как это решить?Есть ли проблемы с кодом?Или есть настройка Firebase для ее решения?

Tks.

1 Ответ

0 голосов
/ 15 октября 2018

Здесь две вещи не так:

  1. Обратный вызов onFinalize () не получает объекты res и req, как это делают триггеры HTTP.Он получает метаданные объекта в качестве первого аргумента. Подробнее см. В документации.

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

-

exports.uploadControl = functions.storage.object().onFinalize(object => {
    return uploadControl.handler(object);
});
...