Home > front end >  How to call a second function within async google cloud function
How to call a second function within async google cloud function

Time:02-10

I'm trying to use the firebase admin SDK to add users with specific roles. I can get it working where newly added users are authenticated, but I also need to create a users/id record in my firestore database.

Here is my code:

exports.createUser = functions.https.onCall(async (data, context) => {
  const user = await admin.auth().createUser({
    email: data.email,
    emailVerified: true,
    password: data.password,
    displayName: data.displayName,
    disabled: false,
  });
  await admin.firestore().collection('users').doc(user.uid).set({
    displayName: user.displayName,
    id: user.uid,
    email: user.email,
    role: 'clientAccess',
    created: fb.firestore.FieldValue.serverTimestamp()
  })
  return { response: user }
});

Where can I put the return admin.firestore().col... part to make this work?

Thanks!

CodePudding user response:

I'm going to suggest that you're not quite asking the right question. Your task at hand is this:

  1. Create the user account
  2. Add a document to firestore with information about that user
  3. Send the user object back to the calling client.

You don't need at all return for task 2. You just need a return for step 3. You can simply use async/await on each of the functions that return a promise to make sure they are all executed and completed in the right order before the function returns the final result to the client.

    const user = await admin.auth().createUser({ ... });
    await admin.firestore().collection('users').doc(user.uid).set({ ... })
    return { response: user }

You probably also don't nee to worry about try/catch unless you have some special error handling.

  •  Tags:  
  • Related