将用户标识推送到firebase DB时出错

时间:2017-06-13 19:59:30

标签: javascript angular firebase angularfire2

您好我希望每个用户在我的数据库上存储日期,因为我想创建一个每个用户都有UID的节点。

我有一个使用该方法的身份验证服务:

 signupCommerce(email: string, password: string){
    return secondaryApp.auth().createUserWithEmailAndPassword(email, password).then(function(firebaseUser) {
      console.log("User " + firebaseUser.uid + " created successfully!");
       
        return firebaseUser.uid;
    });
  }

使用此方法的数据库服务:

createCommercePath(category:string,id:string, commerce:string, banner:string, logo: string, latitude:number, longitude:number){
    this.db.database.ref().child(category).child(id).push({
      name: commerce,
      bannerUrl: banner,
      logoUrl: logo,
      lat: latitude,
      lng: longitude
    });
  }

在我的组件中,我的表单调用此方法:

 createCommerce(){
let commerceId = this.authService.signupCommerce(this.email, this.password);
this.db.createCommercePath(this.category, commerceId, this.commerce, this.bannerUrl, this.logoUrl, this.lat,this.lng);
  }

我收到此错误:

Argument of type 'Promise<any>' is not assignable to parameter of type 'string'.

2 个答案:

答案 0 :(得分:0)

signUpCommerce() - 函数返回Promise<any>

let commerceId = this.authService.signupCommerce(this.email, this.password);

因此commerceId的类型为Promise<any>

您可以将signUpCommerce功能更改为以下内容:

signupCommerce(email: string, password: string){
    return secondaryApp.auth().createUserWithEmailAndPassword(email, password);
  }

然后在createCommerce()

中使用它
createCommerce(){
    this.authService.signupCommerce(this.email, this.password)
    .then(firebaseUser => {
        let commerceId = firebaseUser.uid;
        this.db.createCommercePath(this.category, commerceId, this.commerce, this.bannerUrl, this.logoUrl, this.lat,this.lng);
    });
}

答案 1 :(得分:0)

如错误中所述,您的方法返回值Promise<any>。据我所知,你想得到从这个承诺中回来的字符串 因此,我建议您使用的一个选项是:(使用rxjs,如果您的项目中没有它,则需要npm安装它)

import 'rxjs/add/operator/first';
import 'rxjs/Rx' ;
import 'rxjs/add/operator/toPromise';

signupCommerce(email: string, password: string){
  return secondaryApp.auth().createUserWithEmailAndPassword(email, password).first().toPromise();
}  

上面的代码适用于您的服务功能。 以及代码使用的以下代码:enter code here

createCommerce(){
  let commerceId = this.authService.signupCommerce(this.email, this.password).then( response => {
     this.db.createCommercePath(this.category, commerceId, this.commerce, this.bannerUrl, this.logoUrl, this.lat,this.lng);
  })
  .catch(err => console.log(err); 

}

享受:)