【发布时间】:2019-09-02 21:15:52
【问题描述】:
我编写了一个 Firebase 云函数来从外部 api 获取数据并读/写到 Firestore。我用“firebase serve”在本地运行了几次该功能。然后我注意到每小时进行了约 500 次 Firestore API 调用,即使没有调用该函数也是如此。并且 Firestore 写入和删除保持为 0,只有读取增加。
只有在我关闭计算机时才会停止读取峰值,因此我相信云功能是原因。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const axios = require('axios');
admin.initializeApp();
exports.someFunc = functions.https.onRequest((request, response) => {
const url = 'https://someurl.com';
const getData = async url => {
try {
const response = await axios.get(url);
const data = response.data;
if (data.status === 'ok') {
data.articles.forEach(element => {
if (element.author) {
element.author = element.author.replace(/\//g, ',');
var authorRef = admin
.firestore()
.collection('authors')
.doc(element.author);
authorRef
.get()
.then(doc => {
if (!doc.exists) {
authorRef.set({
sources: [element.source.name]
});
} else {
var sources = doc.data().sources;
if (!sources.includes(element.source.name)) {
sources.push(element.source.name);
authorRef.update({
sources: sources
});
}
}
return null;
})
.catch(error => {
console.log('Error getting document:', error);
});
}
if (element.source.name) {
element.source.name = element.source.name.replace(/\//g, ',');
var sourceRef = admin
.firestore()
.collection('sources')
.doc(element.source.name);
sourceRef
.get()
.then(doc => {
if (!doc.exists) {
var sourceUrl = 'https://' + element.url.split('/')[2];
sourceRef.set({
sourceUrl: sourceUrl
});
}
return null;
})
.catch(error => {
console.log('Error getting document:', error);
});
}
admin
.firestore()
.collection('articles')
.add(element);
});
}
} catch (error) {
console.log(error);
}
};
getData(url);
response.send('Success!');
});
'authors'、'sources' 和 'articles' 集合每个最多只有 20 个文档,所以肯定有一些重复调用 Firestore 的东西我找不到。
【问题讨论】:
-
您是否也有带 Db 触发器的云功能?能否发布您的云功能使用详情
-
@MahiTejGvp 不,这是我唯一的功能。以下是详细信息imgur.com/a/9vC8oQP
-
您能否也发布您的云功能使用情况统计信息
-
它准确显示了我调用它的次数。由于我部署了该功能,它只显示 1.
标签: firebase google-cloud-firestore google-cloud-functions