#node.js #firebase #google-cloud-functions
# #node.js #firebase #google-облачные функции
Вопрос:
Я использую приведенный ниже код для чтения файла json в хранилище Google firebase, а затем возвращаю содержимое файла. Код работает, но все, что я получаю на стороне клиента, равно null
exports.updateProductCatalogue = functions.https.onCall(async (data, context) => {
const filepath = data.filepath
const bucketname = data.bucket
const remoteFile = bucket.file("storeid.json");
let buffer = '';
remoteFile.createReadStream()
.on('error', function(err) {console.log(err)})
.on('data', function(response) {
buffer = response
console.log(buffer)
})
.on('end', function() {
//console.log(buffer);
console.log("FINISHED!!")
})
return buffer
})
это мой вызов js на стороне клиента
function getUpdatedCatalogue(){
var getStorageData = firebase.functions().httpsCallable('updateProductCatalogue');
var callData = {
"bucket":"test"
}
getStorageData(callData).then(function(result){
console.log(result)
}).catch(function(error){
console.log(error)
})
}
Облачная консоль.журнал показывает, что содержимое считывается и отображается в журнале, но на стороне клиента консоль.журнал возвращает значение null. Вот файл, который я читаю.
Почему я не получаю содержимое файла, возвращаемое и отображаемое на стороне клиента? как я могу это исправить?
Ответ №1:
Проблема в том, что вы возвращаете буфер до того, как поток завершит чтение файла.
Попробуйте это (не проверено),
exports.updateProductCatalogue = functions.https.onCall(async (data, context) => {
const filepath = data.filepath;
const bucketname = data.bucket;
const remoteFile = bucket.file("storeid.json");
return new Promise(resolve, reject) => {
let buffer = '';
remoteFile.createReadStream()
.on('error', function(err) {
console.log(err);
reject(err);
})
.on('data', function(response) {
buffer = response;
console.log(buffer);
})
.on('end', function() {
console.log("FINISHED!!")
resolve(buffer);
});
});
});