简体   繁体   中英

How to call a second function within async google cloud function

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!

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM