TypeError:快照.forEach不是一个函数——循环遍历firebase数据库



我正在努力理解为什么我的函数在尝试通过Firebase实时数据库的快照循环时失败。

该函数应该读取每个"主题",从每个"主题"中有一个"文章"字段,其中大约有10篇文章与之相关。该函数读取每篇文章的URL并抓取文章网站上最大图像的URL。然后,它应该为每个"Article"添加一个新字段"imageURL"。

当部署时,我收到以下内容:

TypeError:快照。forEach不是函数

scraper.js

exports.imageScraper = functions.database.ref("searchTrends/google")
.onUpdate((snapshot, context) => {
functions.logger.error(snapshot);
snapshot.forEach(function(trendSnapshot) {
// TrendSnapshot - Key is topic Num
// Value is topic details with list of articles
const topicNum = trendSnapshot.key;
trendSnapshot.forEach(function(innerChild) {
if (innerChild.key == "articles") {
innerChild.forEach(function(articleData) {
const articleNum = articleData.key;
const myUrl = articleData.child("url").val();
// console.log(myUrl);
const options = {
url: myUrl,
};
// console.log(options);
ogs(options, (error, results, response) => {
if (typeof results.ogImage === "undefined") {
console.log("no Image");
} else {
if (results.ogImage.url === undefined) {
return "done";
}
console.log(articleNum);
const DBRef = admin.database().ref("searchTrends/google/" +
topicNum + "/articles/" + articleNum);
DBRef.update({imageURL: results.ogImage.url});
}
});
});
return "done";
}
}).catch((error) => {
console.log("Transaction failed: ", error);
return null;
});
});
});

错误告诉您snapshot没有称为forEach的方法。它不是您所期望的DataSnapshot对象。它是一个Change对象,具体来说是Change<DataSnapshot>

对于onWrite或onUpdate事件,第一个参数是一个Change对象,包含两个快照,表示触发事件前后的数据状态。

也可参考onUpdate的API文档。

最新更新