Firebase Cloud函数-如何调用另一个函数并返回对象

全汉

我已经从Angular组件中创建了一个可调用函数。我的角度组件调用该createUser函数并成功返回userRecord值。

但是,我想做的是调用另一个名为的云函数createUserRecord我对promise和在此特定情况下需要返回的内容不太熟悉。

以下是我的两个云功能。我将如何呼吁createUserRecord成功createUser

export const createUser = functions.https.onCall(async (data, context) => {
    console.log('data = ', data);
    return admin.auth().createUser({
        email: data.email,
        password: data.password,
    }).then(function (userRecord) {
        return userRecord
    })
        .catch(function (error) {
            return error;
            console.log('Error creating new user:', error);
        });
});




export const createUserRecord = functions.auth.user().onCreate((user, context) => {
    const userRef = db.doc(`users/${user.uid}`);
    return userRef.set({
        email: user.displayName,
        createdAt: context.timestamp,
        nickname: 'bubba',
    })
});

更新资料

这是我生成的版本,其中我将两个功能合并在一起。这确实产生了创建和帐户,然后写入Firestore的预期结果。但是,由于它没有向客户端返回值,因此确实感觉有点“偏离”。

export const createUser = functions.https.onCall(async (data, context) => {
    console.log('data = ', data);
    return admin.auth().createUser({
        email: data.email,
        password: data.password,
    }).then(function (userRecord) {
        const userRef = db.doc(`users/${userRecord.uid}`);
        return userRef.set({
            email: data.email,
            name: data.name,
        })
    })
        .catch(function (error) {
            return error;
            console.log('Error creating new user:', error);
        });
});

角度可调用函数

sanitizedMessage控制台日志将返回undefined。

addUser() {

    const createUser = firebase.functions().httpsCallable('createUser');

    const uniquePassword = this.afs.createId();

    createUser({
      email: this.userForm.value.email,
      password: uniquePassword,
      name: this.userForm.value.name,
    }).then((result) => {
      // Read result of the Cloud Function.
      var sanitizedMessage = result.data.text;
      console.log('sanitizedMessage = ', sanitizedMessage);
    }).catch((error) => {
      var code = error.code;
      var message = error.message;
      var details = error.details;
      console.log('error = ', error);
    });
  }
雷诺·塔内克(Renaud Tarnec)

如果您想在用户创建后在Firestore中创建记录,则可以在唯一的Cloud Function中很好地做到这一点。以下代码可以解决问题,并假设您要写入usersFirestore集合。

const FieldValue = require('firebase-admin').firestore.FieldValue;

...
export const createUser = functions.https.onCall((data, context) => {
  console.log('data = ', data);
  return admin
    .auth()
    .createUser({
      email: data.email,
      password: data.password
    })
    .then(userRecord => {
      return admin.firestore().collection('users')
        .doc(userRecord.uid)
        .set({
          email: userRecord.displayName,
          createdAt: FieldValue.serverTimestamp(),
          nickname: 'bubba'
        });
    })
    .then(() => {
      return {
        result: 'Success'
      };
    })
    .catch(error => {
      //Look at the documentation for Callable Cloud Functions to adapt this part:
      //https://firebase.google.com/docs/functions/callable?authuser=0
    });
});

“有没有特别的理由不将功能链接到CF中?”

文档中所述,“云功能可以与特定触发器关联”。您可以通过创建相应的触发器来“链接” Cloud Functions,例如,在一个CF中在Firestore中创建文档(例如Callable Function),该文档将触发另一个响应Firestore触发器的CF。话虽如此,在大多数情况下,您可以通过链接承诺而不是链接Cloud Functions来满足独特的Cloud Function中的许多需求

最后,我不建议从Cloud Function中调用HTTP Cloud Function,因为(IMHO)HTTP Cloud Functions的设计目的是由外部使用者调用(我什至不知道这样做是否可行)。

让Firebasers对此发表意见会很有趣!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Firebase Cloud函数调用函数

将Firebase数据库阵列返回到另一个函数,但返回空

在代码中获取Firebase的另一个http cloud函数的url

在调用另一个函数之前等待 firebase fetch 完成

如何使用cfc对象的引用从另一个函数调用一个函数?

未调用 Firebase Cloud 函数

如何从GCP中的另一个Go Cloud函数调用Go Cloud函数

Firebase 可调用函数在一个项目上工作,在另一个项目上引发错误

如何通过Promise.all返回到另一个功能Firebase的Cloud Functions

RxSwift如何调用1个或多个函数以返回另一个函数

如何从Firebase Cloud Function调用异步函数

如何让Firebase函数从另一个目录中找到index.js?

Angular 2 firebase 如何将变量传递给另一个函数?

如何从另一个函数返回哪个调用函数?

如何调用另一个函数的返回内部函数?

如何在 JavaScript 中调用返回另一个函数的函数?

如何调用另一个函数内部的函数?

如何从函数调用到另一个函数

在调用另一个函数之前返回

如何编写返回另一个函数的函数?

调用另一个对象中的函数

从另一个函数获取返回对象

另一个Google Firebase错误“函数返回了未定义,预期的承诺或价值”

如何从另一个函数调用一个函数以及如何调用?

我无法从一个函数调用对象到另一个函数

NodeJS如何调用从另一个文件夹返回字符串的函数

我如何从包含我的对象的另一个类调用函数?

如何获取从另一个模块调用的函数的结果对象?

如何通过另一个类的图形对象调用函数?