Мне бы хотелось, чтобы мое веб-приложение Firebase загрузило файл, и мне нужна облачная функция, которая обнаруживает этот файл и создает объект базы данных на основе его содержимого. Вот последний вариант из многих, которые я пробовал ...
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const { Storage } = require('@google-cloud/storage');
admin.initializeApp();
const db = admin.firestore();
exports.onStorageFinalize = functions.storage.object().onFinalize((object) => {
const storage = new Storage();
const bucket = storage.bucket('my app's storage bucket name');
return bucket.file(object.name).download(function (err, contents) {
// problem: no err, no contents, set doesn't run just a warning about promises!
const result = `got err=${err}, contents=${contents}`
return db.collection('myCollection').doc().set({
result: result
})
});
});
Загружен очень маленький файл, и этот триггер работает. Когда я не пытаюсь получить содержимое файла, объект базы данных создается нормально (с литеральной строкой вместо результата файла).
Но когда я запускаю его, как показано выше, сначала я получаю предупреждение, которое гласит:
onStorageFinalize: функция возвратила неопределенное, ожидаемое обещание или
значение
Это неправильно. Документ для file().download()
говорит, что он возвращает обещание .... и, что более важно, база данных set()
не работает.
Я поражен тем, насколько запутанными и неясными (и я считаю неправильными?) Документы Google по этому, казалось бы, основному варианту использования. Очень благодарен, если кто-то может помочь.