私は、トランザクションを終了するまで待つべきトランザクションの約束を返します。トランザクションは正常に実行されますが、約束は決して解決されないようです。FireWall onWriteタイムアウトのクラウド機能
この機能は、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;
});
EDIT:
私は何.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'ライブラリ自体の問題のようです。 –
この「ハック」は、私のクラウド機能の実行時間を大幅に短縮しました。 –
何らかの理由で、 'then'を呼び出すと動作します。例: 'countRef.transaction(current => {..})。then(()=> {console.log(" Transaction finished ")})' – Christian