cloud functionsの関数トリガーで非同期処理 async/awaitを使う
はじめに
cloud functionsでドキュメントの数をカウントする処理があるのですが、、たまに回数がズレてたり間違ったり、正常に動作していない時があります
どこかしらで処理が終わっているのか、何かしらのエラーがたまに発生しているのか、具体的な理由はわかりませんが、とりあえず非同期にしてみることにしました
ドキュメントの数をカウントするFunctionで、async/awaitを使う
ただ、cloud functionsの関数トリガー(onWriteとか)でasync/await
を使う場合、どうやって書けばいいのか分からず検索しまくりました。。。
👆公式のサンプルを参考に実装しました!
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
const db = admin.firestore();
exports.countEvents = functions.region('asia-northeast1').firestore
.document('users/{userId}/events/{eventId}')
.onWrite(async (change, context) => {
try {
const userId = context.params.userId;
const FieldValue = admin.firestore.FieldValue;
const countsRef = db.collection('users').doc(userId);
if (!change.before.exists) {
// 登録時に件数をインクリメント
await countsRef.update({ eventCount: FieldValue.increment(1) });
return
} else if (change.before.exists && !change.after.exists) {
// 削除時に件数をデクリメント
await countsRef.update({ eventCount: FieldValue.increment(-1) });
return
}
return null;
} catch (error) {
console.error(`Fatal error ${error}`);
return null;
}
});
async
はonWrite
のカッコに、await
はその後のドキュメントをカウントする処理のところで使用。
async/awaitの使い方に関する詳細は下記を参考に!
Author And Source
この問題について(cloud functionsの関数トリガーで非同期処理 async/awaitを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/kokogento/items/a736b09929b78bbb8cc5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .