gpt4 book ai didi

node.js - 为什么这个 firebase 函数会递归运行?

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:21 24 4
gpt4 key购买 nike

我猜这与不理解 Promise 和执行顺序有关,但我目前很困惑为什么这个 Firebase Function(重新打包的 Google Cloud Functions)代码会递归运行。

当前该函数成功执行一次(获取数据、写入数据库条目、将文件写入存储),然后每 15-30 秒重复一次,直到达到“402”错误状态。它只执行一次。

如有任何帮助,我们将不胜感激。

exports.add = functions.https.onRequest((req, res) => {
cors(req, res, () => {
if (req.query.idToken) {
// there's a query param
var idToken = req.query.idToken;

admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
var uid = decodedToken.uid;

var userRef = database.ref('users/' + uid);
var feedCountRef = database.ref('users/' + uid).child('feeds');
var plansRef = database.ref('plans')

userRef.once('value', function(snapshot){
var feedsCount = snapshot.val().feeds;
var currentPlan = snapshot.val().membership;
var planRef = database.ref('plans/' + currentPlan);

planRef.once('value', function(snapshot) {
console.log(snapshot.val());
var allowedFeeds = snapshot.val().feeds;
if(feedsCount < allowedFeeds) {
fetchFeed(req.body.feedSource, function(feedData) {
var defaultFeedName = 'Untitled';
var defaultUpdateFrequency = 'Weekly';

var feedsdatabaseRef = database.ref('feeds/' + uid);
var newFeedDatabaseRef = feedsdatabaseRef.push();
var feedKey = newFeedDatabaseRef.key;

writeFeedStorage(feedKey, feedData, function(response) {
console.log(response);
newFeedDatabaseRef.set({
// write data
})
});

feedCountRef.transaction(function(feeds){
return (feeds || 0) + 1;
});

return;
});
} else {
console.log('over quota');
res.status(402).send({error: 'You are at the maximum number of feeds your plan allows.'});
}
});
})
}).catch(function(error) {
res.status(401);
});
} else {
res.status(401);
}
})
})

最佳答案

从您的代码片段来看,它重复运行的一个潜在原因是,如果事情正常运行,您不会返回 ok 状态,例如

res.status(200).send('ok');

根据 Firebase documentation ,这是您应该为 HTTP 函数执行的操作。

关于node.js - 为什么这个 firebase 函数会递归运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47870472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com