[未处理的承诺拒绝:TypeError:未定义不是对象(正在评估'_ref.about')]

时间:2020-03-30 21:42:39

标签: javascript firebase react-native google-cloud-firestore

首先,请不要判断我,我对整个本地语言环境和Java语言场景有点陌生,而学习主要是为我最后的学校毕业典礼做出本地语言反应。

My Firestore Database

在图片中,您将看到我的数据库,我正在尝试使用异步方法来执行此操作,但是我遇到了问题。

我的目标

能够添加并最终编辑/更新用户信息,以通过前端显示在个人资料页面和设置页面上。

到目前为止发生了什么

我能够通过后端工作使它正常工作。这意味着我实际上要进入数据库并以这种方式添加和更改它,但这并不是我想要的。我希望我的用户能够完全控制。

“我的设置”页面上的“关于我的我”部分

<Block row space="between" margin={[10, 0]} style={styles.inputRow}>
              <Block>
              <Text gray2 style={{ marginBottom: 10 }}>
                  Bio
                </Text>
                {this.renderEdit("about")}
              </Block>
              <Text
                medium
                secondary
                onPress={() => this.toggleEdit("about")}
              >

                {editing === "about" ? "Save" : "Edit"}

              </Text>
             <Button 
                onPress={() => { 
                 Fire.shared.addInfo(); 
                }} 
                title="Add" 
            />       
            </Block> 

到目前为止,这不是一个错误,而只是一个警告,我确定我会丢失更多代码以使其正常工作

fire.js页面的我的添加信息部分

 addInfo =  async({ about }) => {

            return new Promise ((res, rej) => {
                this.firestore
                .collection("users")
                .add ({
                   about,
                })
                .then(ref => {
                    res(ref);
                })
                .catch(error => {
                    rej(error);
                });
            });
          };

我在这里做错了什么。如果有人可以帮助我,我真是迷茫

1 个答案:

答案 0 :(得分:1)

您在这里犯了几个错误:

  1. 您要用新的Promise包装东西,这些东西已经返回Promise
  2. 您正在使用asyncawait库而不是内置库
  3. 您正在捕获错误并且没有处理
  4. 您正在分解userInfo,然后再次构建它

我想您想要实现的目标可以这样完成:

class YourFireClass {
 ...

 addInfo(userInfo) {
    return this.firestore.collection("users").add(userInfo);
 }

 ...
}