【问题标题】:Trouble understanding Cloud Function Error无法理解 Cloud Function Error
【发布时间】:2020-12-08 16:38:12
【问题描述】:

我是云函数 node.js 和类型脚本的新手。我正在运行下面的代码并收到下面的错误,并且在观看了大量有关承诺和搜索其他问题的视频后无法理解它。

任何帮助将不胜感激。

函数返回未定义的、预期的 Promise 或值

exports.compReqUpdated = functions.firestore
      .document('/compRequests/{id}')
      .onUpdate((change, contex)=>{
        const newData = change.after.data();
        //const oldData = change.before.data();
        const dbConst = admin.firestore();
        const reqStatus:string = newData.requestStatus;
        const compId:string = newData.compID;
        const reqActive:boolean = newData.requestActive;
    

    if (reqStatus == "CANCELED" && reqActive){

        const query = dbConst.collection('compRequests').where('compID', '==', compId);
        
        const batch = dbConst.batch();

        query.get().then(querySnapshot => {
          const docs = querySnapshot.docs;
          for (const doc of docs) {
            console.log(`Document found at path: ${doc.ref.path}`);
            console.log(doc.id);
            const docRef = dbConst.collection('compID').doc(doc.id);

            batch.update(docRef, {requestStatus: 'CANCELED',requestActive: false});

          };
          
          return batch.commit()
          })
        
        .catch(result => {console.log(result)});

    }else{
        return
    }
   
  });

【问题讨论】:

    标签: javascript node.js typescript google-cloud-firestore google-cloud-functions


    【解决方案1】:

    回调传递给 onUpdate 函数的 firebase docs 状态应返回 PromiseLikeany 值,但你现在没有返回任何东西。如果您将代码更改为如下所示,我认为它应该可以按预期工作:

    exports.compReqUpdated = functions.firestore
      .document('/compRequests/{id}')
      .onUpdate((change, contex) => {
        const newData = change.after.data();
        //const oldData = change.before.data();
        const dbConst = admin.firestore();
        const reqStatus: string = newData.requestStatus;
        const compId: string = newData.compID;
        const reqActive: boolean = newData.requestActive;
    
    
        if (reqStatus == "CANCELED" && reqActive) {
    
          const query = dbConst.collection('compRequests').where('compID', '==', compId);
    
          const batch = dbConst.batch();
    
          return query.get().then(querySnapshot => {
            const docs = querySnapshot.docs;
            for (const doc of docs) {
              console.log(`Document found at path: ${doc.ref.path}`);
              console.log(doc.id);
              const docRef = dbConst.collection('compID').doc(doc.id);
    
              batch.update(docRef, { requestStatus: 'CANCELED', requestActive: false });
    
            };
    
            return batch.commit()
          }).catch(result => { console.log(result) });
        } else {
          return false;
        }
      });
    

    【讨论】:

    • 谢谢。在查看了您的代码之后,这一切都变得有意义了。 8 小时的睡眠可能也有帮助!
    猜你喜欢
    • 2021-11-25
    • 2015-05-15
    • 2021-12-11
    • 2018-11-03
    • 2020-02-17
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多