Andrei Enache
Andrei Enache

Reputation: 517

Property 'then' does not exist on type 'CloudFunction<Change<DocumentSnapshot>>'

Error: Property 'then' does not exist on type 'CloudFunction>' received on my firebase cloud function, anyone knows how to fix it?



exports.rebuildFormTriggerClientDetails = functions.firestore.
document('clientDetails/{details}').onUpdate((change)  => {
  const afterDoc = change.after.data();
  const documentId = change.after.id

  if (afterDoc)

  {
    let docUsers = db.collection("clientDetails").doc(documentId);
    //var userMap: {[key: string]: any} = {};
    let caseArray: Array<string>;
    caseArray = afterDoc.CaseRefArray;

    for (var valCase of caseArray) {
      console.log(valCase); 
      console.log(documentId);

        createObjectDocument(docUsers,valCase);
    }
  }

}).then(() => {
  console.log("Successfully updated document!");
}).catch((error: any) => {
  console.error("Error updating document: ", error);
});

The createObjectDocument function here. Could this function be the cause of the error?


function createObjectDocument(document: any, caseNumber: String)

{
  document.get().then(function(doc: any) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
        for (let [key, value] of Object.entries(doc.data())) {
          console.log(`${key}: ${value}`);
         if (key != "CaseRefArray")
         {
          db.collection("casesToExport").doc(caseNumber).update({key : value });
         }
        }
    } else {
        console.log("No such document!");
    }
}).catch(function(error: any) {
    console.log("Error getting document:", error);
});

}

Upvotes: 1

Views: 215

Answers (1)

Constantin Beer
Constantin Beer

Reputation: 5835

Change your code like this:

exports.rebuildFormTriggerClientDetails = functions.firestore.
document('clientDetails/{details}').onUpdate((change)  => {
  //const before = change.before;  // DataSnapshot before the change
  const afterDoc = change.after.data();
  const documentId = change.after.id

  if (afterDoc)

  {
    let docUsers = db.collection("clientDetails").doc(documentId);
    //var userMap: {[key: string]: any} = {};
    let caseArray: Array<string>;
    caseArray = afterDoc.CaseRefArray;

    for (var valCase of caseArray) {
      console.log(valCase); 
      console.log(documentId);

        createObjectDocument(docUsers,valCase);
    }
  }

});



function createObjectDocument(document: any, caseNumber: String)

{
  document.get().then(function(doc: any) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
        for (let [key, value] of Object.entries(doc.data())) {
          console.log(`${key}: ${value}`);
         if (key != "CaseRefArray")
         {
          db.collection("casesToExport").doc(caseNumber).update({key : value })
            .then(() => {
                console.log("Successfully updated document!");
            }).catch((error: any) => {
                console.error("Error updating document: ", error);
            });
         }
        }
    } else {
        console.log("No such document!");
    }
}).catch(function(error: any) {
    console.log("Error getting document:", error);
});

}

Your .then() call have to be when you update your document in your db and that's done in your createObjectDocument() function

Upvotes: 2

Related Questions