• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

100
Views
Cloud Functions document copy

Cloud functions

  1. I want to read the document and edit some fields to add it as a new document. How can I do that?

const newData = value.data(); //<<< field modification

  1. And can I use copyWith ?

Code:

exports.productCopy = functions.https.onCall( async (data, context)=>{

    const uid = context.auth.uid;

 



    data.selectedProductId.forEach((docId){
        const productRef = admin.firestore()
                 .collection('products')
             
                 .doc(docId);
        const newProductRef = admin.firestore()
                         .collection('products')
                  
                         .doc();

        const product = await productRef.get().then((value)=>{
            const newData = value.data();

            newProductRef.add(value.data())
        });



    });


    return {status:'success', isError: false};


});
over 3 years ago ยท Juan Pablo Isaza
2 answers
Answer question

0

First, is good to know that each document is immutable, after you get a document in a variable you can modify that variable, and then you will need to put/update/patch the new document.

I meant you need to do 2 API calls, to save correctly the document in your database.

over 3 years ago ยท Juan Pablo Isaza Report

0

You can't really use await in forEach block. If you want to wait for multiple actions, use Promise.all().

It should be something like this:

exports.productCopy = functions.https.onCall((data, context) => {
    const uid = context.auth.uid;

    const promises = data.selectedProductId.map((docId) => {
        return admin.firestore() // ๐Ÿ‘ˆ Return promise, which bubbles up
          .collection('products')                  
          .doc() // ๐Ÿ‘ˆ You need to specify a document ID here, uid maybe?
          .get()
          .then((doc) => {
            const newData = doc.data();
            return admin.firestore() // ๐Ÿ‘ˆ Return promise, which bubbles up
                 .collection('products')             
                 .doc(docId)
                 .add(value.data());
          });
    });

    return Promise.all(promises).then((results) => { // ๐Ÿ‘ˆ Wait for all promises to resolve
      return { status:'success', isError: false };
    })
});

In general it's best to not mix async/await with then(), as it's easy to get into situations as you had. Here, just using promises keep the code as simple as possible

over 3 years ago ยท Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
ยฉ 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error