gpt4 book ai didi

javascript - Firebase HTTPS云函数触发两次

转载 作者:行者123 更新时间:2023-11-28 04:29:20 24 4
gpt4 key购买 nike

我已通读 Firebase 云功能 reference , guidessample code尝试确定为什么我的函数被触发两次,但我尚未找到成功的解决方案。我也尝试过Firebase-Queue作为一种解决方法,但其最新更新表明云功能是可行的方法。

简而言之,我使用 request-promise 从外部 API 检索通知,根据数据库中已有的通知检查这些通知,并在识别出新通知时将其发布到说数据库。然后,相应的地点将引用新通知进行更新。代码如下:

'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const request = require('request');
const rp = require('request-promise');

admin.initializeApp(functions.config().firebase);

const db = admin.database();
const venues = db.ref("/venues/");

exports.getNotices = functions.https.onRequest((req, res) => {
var options = {
uri: 'https://xxxxx.xxxxx',
qs: {
format: 'json',
type: 'venue',
...
},
json: true
};
rp(options).then(data => {
processNotices(data);
console.log(`venues received: ${data.length}`);
res.status(200).send('OK');
})
.catch(error => {
console.log(`Caught Error: ${error}`);
res.status(`${error.statusCode}`).send(`Error: ${error.statusCode}`);
});
});

function processNotices(data) {
venues.once("value").then(snapshot => {
snapshot.forEach(childSnapshot => {
var existingKey = childSnapshot.val().key;
for (var i = 0; i < data.length; i++) {
var notice = data[i];
var noticeKey = notice.key;
if (noticeKey !== existingKey) {
console.log(`New notice identified: ${noticeKey}`)
postNotice(notice);
}
}
return true;
});
});
}

function postNotice(notice) {
var ref = venues.push();
var key = ref.key;
var loc = notice.location;
return ref.set(notice).then(() => {
console.log('notice posted...');
updateVenue(key, loc);
});
}

function updateVenue(key, location) {
var updates = {};
updates[key] = "true";
var venueNoticesRef = db.ref("/venues/" + location + "/notices/");
return venueNoticesRef.update(updates).then(() => {
console.log(`${location} successfully updated with ${key}`);
});
}

任何有关如何纠正双重触发的建议将不胜感激。提前致谢!

最佳答案

问题已解决 - Firebase 控制台日志中的一些错误信息(重复条目)以及错误顺序的嵌套 for 循环导致了明显的双重触发。

关于javascript - Firebase HTTPS云函数触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44754427/

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