提问者:小点点

理解云函数错误时遇到困难


我对云函数node.js和type script是新手。我正在运行下面的代码,得到了下面的错误,并且看了一大堆关于承诺的视频和搜索其他问题后无法理解它。

如有任何帮助,我们将不胜感激。

函数返回未定义的预期承诺或值

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
    }
   
  });

共1个答案

匿名用户

firebase文档说明传递给onUpdate函数的回调应该返回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;
    }
  });