Firebase云功能执行了几次

时间:2019-02-05 18:50:43

标签: firebase firebase-realtime-database google-cloud-functions

我看到了几个有关此问题的主题,但有时只是因为很少的错误而已。

对我来说,这仍然是一个实际问题,我的经验很少:

const addRoom = functions.region('europe-west1').https.onCall((data, context) => {
    console.log("a")
    return Promise.resolve();
});

enter image description here

没有Promise.resolve()的相同结果:

const addRoom = functions.region('europe-west1').https.onCall((data, context) => {
    console.log("a")
});

enter image description here

(当然,我在客户端只调用了一次函数)

我创建了一个Web应用程序,并进行了一些测试:来自云函数的538个调用,但不应超过100个。。。我简直不敢相信这些统计信息,这是不可能的。这是一个严重的问题。

该怎么办?

1 个答案:

答案 0 :(得分:2)

我要如何处理这个问题是在Firestore中创建一个记录eventIds的集合,然后在每次使用要幂等的云函数时进行检查。

//Check if exists in event log
async function isIdempotenceOk(eventId) {
    console.log(eventId);
    let eventDoc = await 
admin.firestore().collection('events').doc(eventId).get();
    if (eventDoc.exists) {
        console.log('Event already processed');
        return false;
    } else {
        await admin.firestore().collection('events').doc(eventId).set({ eventId: eventId });
        return true;
    }
}

然后您可以像这样在其他函数中调用它:

const addRoom = functions.region('europe-west1').https.onCall((data, context) => {
console.log("a")

if(!await isIdempotenceOk(context.eventId)){return null;}
console.log('ok to continue')
return Promise.resolve();
});

这确实意味着您在Firestore中有一个集合,该集合会针对您执行此检查的每个函数调用,并且可能存在另一种方式来存储要检查的eventIds