为什么这个firebase函数递归运行?

我猜这与未理解承诺和执行顺序有关,但我目前难以理解为什么此Firebase函数(重新打包的Google Cloud Functions)代码以递归方式运行。为什么这个firebase函数递归运行?

当前该函数执行成功(读取数据,写入数据库条目,将文件写入存储区),然后每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');

按照火力地堡documentation,这是你应该做的HTTP功能。

以上是 为什么这个firebase函数递归运行? 的全部内容, 来源链接: utcz.com/qa/264135.html

回到顶部