Проблема с пониманием ошибки облачной функции

#javascript #node.js #typescript #google-cloud-firestore #google-cloud-functions

#javascript #node.js #typescript #google-cloud-firestore #google-cloud-функции

Вопрос:

Я новичок в облачных функциях node.js и введите 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" amp;amp; 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 функции, должен возвращать значение PromiseLike or any , но вы ничего не возвращаете прямо сейчас. Если вы измените свой код на что-то вроде следующего, я считаю, что он должен работать так, как ожидалось:

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

Комментарии:

1. Спасибо. После просмотра вашего кода все, наконец, обретает смысл. 8 часов сна тоже могли бы помочь!