firebase - Cloud Functions for Firebase 将 promise 数组返回给 GCF

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

在我的 onWrite 事件处理程序中,我在不同的数据库路径中执行数据更新。该函数在未完成执行任务的情况下被中断。我正在实现 Promise.all() 来将 promise 数组发送到 GCF 并等待所有未完成的工作/任务完成。控制台日志未显示错误。我正在尝试找出我的实现是否正确。

    exports.ObserveProposals = functions.database.ref("/proposals/{jobid}/{propid}").onWrite((event) => {
        const jobid = event.params.jobid;
        const userId = event.params.propid;
        const promises = [];
        const isinvitation = event.data.child("isinvitation").val();

        if (!isinvitation) {
            return userRef = admin.database().ref(`users/${userId}/proposals/sent`);
            if (event.data.exists() && !event.data.previous.exists()) {
                return userRef.child(jobid).set({
                    timestamp: admin.database.ServerValue.TIMESTAMP
                });
            } else if (!event.data.exists() && event.data.previous.exists()) {
                return userRef.child(jobid).remove();
            }
        promises.push(userRef);
        }
        return collectionRef = admin.database().ref(`/jobs/${jobid}`).once('value').then(snapshot => {
        if (snapshot.val() !== null) {
          return countRef = collectionRef.child("proposals").transaction(current => {
            if (event.data.exists() && !event.data.previous.exists()) {
              return (current || 0) + 1;
            } else if (!event.data.exists() && event.data.previous.exists()) {
              return (current || 0) - 1;
            }
          });
         }
         promises.push(collectionRef);
       });
       return Promise.all(promises);
});

最佳答案

Bellow 函数工作正常,promise 数组正在发送到 GCF 并且所有任务都已执行。

exports.ObserveProposals = functions.database.ref("/proposals/{jobid}/{propid}").onWrite((event) => {
    const jobid = event.params.jobid;
    const userid = event.params.propid;
    const promises = [];
    let userRef = admin.database().ref(`users/${userid}/proposals`);
    let jobRef = admin.database().ref(`/jobs/${jobid}/proposals`);
    jobRef.once('value').then(snapshot => {
        if (snapshot.val() !== null) {
            jobRef.transaction(current => {
                if (event.data.exists() && !event.data.previous.exists()) {
                    return (current || 0) + 1;
                } else if (!event.data.exists() && event.data.previous.exists()) {
                    return (current || 0) - 1;
                }
            });
        }
    });
    promises.push(jobRef);
    if (event.data.exists() && !event.data.previous.exists()) {
        const isInvitation = event.data.child("isinvitation").val();
        if (!isInvitation) {
            return userRef.child(`/sent/${jobid}`).set({
                timestamp: admin.database.ServerValue.TIMESTAMP
            });
        } else if (isInvitation) {
            return userRef.child(`/received/${jobid}`).set({
                timestamp: admin.database.ServerValue.TIMESTAMP
            });
        }
    } else if (!event.data.exists() && event.data.previous.exists()) {
        const isInvitation = event.data.previous.child("isinvitation").val();
        if (!isInvitation) {
            return userRef.child(`/sent/${jobid}`).remove();
        }else if (isInvitation) {
            return userRef.child(`/received/${jobid}`).remove();
        }
    }
    promises.push(userRef);
    return Promise.all(promises);
});

关于firebase - Cloud Functions for Firebase 将 promise 数组返回给 GCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43242982/

相关文章:

java - 如何使用来自 firebase 的嵌套对象填充 RecyclerView

android - 在 recyclerview 中只显示一条评论 - Firebase

javascript - Firestore 突然出现巨大的触发延迟

node.js - 函数正在循环

android - 从android调用云函数admin.auth().createUser()不起作用

javascript - 如何在没有 'new' 关键字的情况下将 JS 代码转换为 Kotlin

ios - Firebase 验证规则不起作用

java - 发布的图片未出现在 Firebase Recycler View 中

Swift Firebase 查询 child 的 child

javascript - 在 Node.js/EJS 中单击按钮时如何触发 Firebase POST 请求