javascript - 无法在 firebase fireStore 中添加集合
问题描述
我正在尝试在 fireBase fireStore 中添加一个集合,所以我使用了这个函数 .collection.(doc).set ;集合没有创建,控制台显示错误注册,尽管我在 firebase 的身份验证中找到了新用户,但我希望我能找到好的解决方案。我快疯了
<div class="uk-position-small uk-position-center uk-overlay uk-overlay-default">
<form #f="ngForm" (ngSubmit)="register(f)">
<div class="uk-margin">
<div class="uk-inline">
<span class="uk-form-icon" uk-icon="icon: happy"></span>
<input class="uk-input" type="text" name="firstName" #firstName="ngModel" ngModel required>
<p class="alert alert-danger" *ngIf="firstName.errors?.required && firstName.touched">this input firstName and lastName are required</p>
</div>
</div>
<div class="uk-margin">
<div class="uk-inline">
<textarea class="uk-input" cols="28" rows="10" placeholder="bio" name="bio" #bio="ngModel" ngModel bio required></textarea>
<p class="alert alert-danger" *ngIf="bio.errors?.required && bio.touched">this bio isrequired</p>
</div>
</div>
<div class="uk-margin">
<div class="uk-inline">
<span class="uk-form-icon" uk-icon="mail"></span>
<input class="uk-input" type="text" name="email" #email="ngModel" ngModel email required>
<p class="alert alert-danger" *ngIf="email.errors?.required && email.touched">this input email is required</p>
</div>
</div>
<div class="uk-margin">
<div class="uk-inline">
<span class="uk-form-icon uk-form-icon-flip" uk-icon="icon: lock"></span>
<input class="uk-input" type="password" name="password" #password="ngModel" ngModel password required minlength="8">
<p class="alert alert-danger" *ngIf="password.errors?.required && password.touched">this input password is required</p>
<p class="alert alert-danger" *ngIf="password.errors?.minlength && password.touched">this input password should +8 caratere</p>
</div>
</div>
<div class="uk-margin">
<div class="uk-inline">
<span class="uk-form-icon uk-form-icon-flip" uk-icon="icon: lock"></span>
<input class="uk-input" type="password" name="confirmPassword" #confirmPassword="ngModel" ngModel required minlength="8">
<p class="alert alert-danger" *ngIf="confirmPassword.errors?.required && password.errors?.minlength && confirmPassword.touched">this input confirmpassword is required</p>
<p class="alert alert-danger" *ngIf="password.value!==confirmPassword.value && password.touched">not equal</p>
</div>
</div>
<button type="submit" class="btn btn-success">Register</button>
</form>
</div>
export class RegisterComponent implements OnInit {
constructor(private as:AuthService , private fs:AngularFirestore , private route:Router) { }
ngOnInit(): void {
}
register(f){
// console.log(f.value)
let data=f.value
this.as.signUp(data.email,data.password ).then((user)=>{
this.fs.collection("users").doc(user.user.uid).set({
firstName:data.firstName,
email:data.email,
bio:data.bio,
uid:data.user.user.uid
})
.then(()=>{
console.log('done')
// this.route.navigateByUrl('/home')
})
})
.catch(()=>{
console.log('error register')
})
}
}
@Injectable({
providedIn: 'root'
})
export class AuthService {
user: Observable<firebase.User>;
constructor(private fa:AngularFireAuth) {
this.user=this.fa.user
}
signUp(email,password){
return this.fa.createUserWithEmailAndPassword(email,password)
}
signIn(email,password){
return this.fa.signInWithEmailAndPassword(email,password)
}
}
解决方案
你没有在你的链中返回承诺,所以你的代码正被它们吹走。如果这不能解决您的问题,那么问题出在您的signUp
代码中,您必须发布它以获得更多帮助。
register(f){
let data=f.value
this.as.signUp(data.email, data.password).then((user) => {
// You need to return this promise. Right now, your code
// is blowing right by it and immediately calling the next `then`
return this.fs.collection("users").doc(user.user.uid).set({
firstName: data.firstName,
email: data.email,
bio: data.bio,
uid: data.user.user.uid
})
}).then(() => {
// This code block has now waited for the doc to be set
console.log('done')
// this.route.navigateByUrl('/home')
}).catch((error) => {
console.log('error register')
console.log(error)
})
}
推荐阅读
- mysql - 具有无序parentid的mysql分层sql查询
- rest - 休息接口 JAX-RS
- c# - 如何在发布构建工件时设置变量值?
- php - Laravel 命名路由 URL 参数未按预期工作
- prolog - Prolog 动态谓词基本用法
- python - 抓取在某些时候不断出现错误
- c# - WebClient 请求期间发生异常(拒绝访问路径“E:\Zipfils\Backups\Hyderabad”。)
- git - Composer 找不到更深层次的开发依赖的匹配项
- java - 使用 Eureka Discovery Server 进行基于 WAR 的微服务注册
- bash - 使用 jq 从 json 获取键值