joffd
joffd

Reputation: 531

Trouble understanding Cloud Function Error

I am new to cloud funcations node.js and type script. I am running the below code and getting the error below and can't make sense of it after watch a ton of videos about promises and searching other questions.

any help would be appreciated.

Function returned undefined, expected Promise or value

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

Upvotes: 1

Views: 34

Answers (1)

etarhan
etarhan

Reputation: 4176

The firebase docs state that the callback passed to the onUpdate function should return PromiseLike or any value, but you aren't returning anything right now. If you change your code to something as follows I reckon it should work as expected:

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

Upvotes: 3

Related Questions