我在返回停止函數之前應等待事務完成的事務許諾。交易執行得很好,但承諾似乎永遠不會解決。用於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