云函数错误:函数返回了未定义的预期承诺或值,以及TypeError:无法读取未定义的属性“ First_Name”

时间:2018-10-03 22:55:50

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

我正在编写一个简单的云函数,当创建新用户时,该函数应使用特定名称在特定集合中创建一个新文档。我尝试了各种编码方法,并且我想出了我认为最接近有效代码的代码,因为我一个人就能得到。这是有问题的代码:

var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.emailUserRegistration = functions.auth.user().onCreate((user) => {



admin.firestore().collection('UnauthenticatedUsers').doc(user.email).get()
.then(snapshot => {

  var userObject = {
    Email: user.email,
    First_Name: snapshot.data().First_Name, 
    Last_Name:snapshot.data().Last_Name,
    Password:snapshot.data().Password,
    Phone_Number:snapshot.data().Phone_Number,
    Address:snapshot.data().Address
};
  return admin.firestore().collection('Users').doc(user.uid).set(userObject);
})
.catch(error => {
    //Handle the error
    console.log('[YAX]',error)
})

});

发生的问题如下:

1)返回的函数是不确定的,并且期望Promise或值。我不明白为什么在set方法返回Promise时会出现问题。根据我看过的各种教程(包括Firebase的官方YouTube频道和其他独立程序员的YouTubers),如果某个函数返回了Promise,则只需返回该函数即可。

2)TypeError:无法读取未定义的属性“ First_Name”。我完全不知道为什么当我实际上将它作为快照.data()之后的可能变量时,为什么代码无法读取“ First_Name”。在Visual Studio代码中。

3)标题中未提及,但是由于上述两个错误,由于某种原因,函数执行返回状态为“ ok”。

我是一名初学者Android开发人员,使用Cloud Functions是我从Firebase客户支持部门获得的建议和解决方案,但是在问他们这个特定问题时,他们还没有答复我。请记住,我是Node.js的初学者(在此项目之前我从未做过任何事情),除了希望我的代码能够工作之外,我绝对想知道这里发生的事情,或者更简单术语我想了解代码执行了什么功能以及为什么它不执行我的逻辑要求的功能。

任何人都需要更多上下文,我将很乐意提供它。

1 个答案:

答案 0 :(得分:1)

第一个问题的答案

var functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.emailUserRegistration = functions.auth.user().onCreate((user) => {


// return this function
return admin.firestore().collection('UnauthenticatedUsers').doc(user.email).get()
.then(snapshot => {

  var userObject = {
    Email: user.email,
    First_Name: snapshot.data().First_Name, 
    Last_Name:snapshot.data().Last_Name,
    Password:snapshot.data().Password,
    Phone_Number:snapshot.data().Phone_Number,
    Address:snapshot.data().Address
};
  return admin.firestore().collection('Users').doc(user.uid).set(userObject);
})
.catch(error => {
    //Handle the error
    console.log('[YAX]',error)
})
});

第二个问题的答案 最好上传 UnauthenticatedUsers 文档的图片。

 First_Name: snapshot.data().First_Name // this should be same as in your document and it is case sensitive also please check with your document.

希望这对您有帮助...