2017-06-13 79 views
0

您好,我希望爲每個用戶在我的數據庫中存儲日期,因爲我希望爲每個用戶創建一個包含UID的節點。將用戶ID推送到firebase數據庫時出錯DB

我對此方法的認證服務:

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

而且這種方法的DB服務:

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'.

回答

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); 
    }); 
} 
+0

謝謝您的回答,我怎樣才能得到驗證服務的uid和推到DB。 –

+0

孩子的方法需要一個字符串我不能通過一個Promise –

+0

謝謝,那工程,但我不知道有什麼區別。 –

0

A在錯誤中描述的,你的方法返回值爲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); 

} 

享受:)

相關問題