我在返回停止函数之前应等待事务完成的事务许诺。交易执行得很好,但承诺似乎永远不会解决。用于Firebase onWrite超时的云端函数
我在Firebase控制台中看到此功能在60秒后总是超时。
const functions = require('firebase-functions');
const admin = require("firebase-admin");
const db = admin.database();
export let countFollowers = functions.database.ref('followers/{followee}/{follower}').onWrite(event => {
const followee = event.params.followee;
let path = `posts/${followee}/cnt_foll`;
const countRef = db.ref(path);
let out = countRef.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (parseInt(current) || 0) + 1;
} else if (!event.data.exists() && event.data.previous.exists()) {
return (parseInt(current) || 0) - 1;
}
});
return out;
});
编辑:
我解决这个问题,下面的“黑客”,我创建了一个承诺自己,因为无论.transaction
将返回不工作:
return new Promise(function(resolve, reject) {
countRef.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (parseInt(current) || 0) + 1;
} else if (!event.data.exists() && event.data.previous.exists()) {
return (parseInt(current) || 0) - 1;
}
},() => resolve(null));
});
它看起来像一个'firebase'库本身的问题。 –
这个“黑客”显着降低了我的云功能的执行时间。 –
出于某种原因,如果你打电话'然后'它的作品。示例'countRef.transaction(current => {..})。然后(()=> {console.log(“Transaction finished”)})' – Christian