云函数读取文件,但它不返回客户端的内容



我正在使用下面的代码读取谷歌firebase存储中的json文件,然后返回该文件的内容。代码有效,但我在客户端得到的只是空

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)
})
}

云console.log显示内容已读取并显示在日志中,但客户端console.log返回null。这是我正在读的文件。

为什么我没有得到文件内容返回并显示在客户端?我该怎么解决这个问题?

问题是在流完成读取文件之前返回缓冲区。

试试这个(未测试(,


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);
});
});
});

最新更新