以下のような非同期メソッドがあります。エラーが表示されます[ts] 'await' expression is only allowed within an async function.
ここに await userProfile.set({
。整理する方法を教えてください。
注:たぶんpromise
内でobservable
を呼び出そうとしたことが原因です。どんな手掛かり?
async loginWithGoogle(): Promise<void> {
const result = await this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
const userId: string = result.uid;
const userProfile: AngularFirestoreDocument<UserProfile> = this.fireStore.doc(`userProfile/${userId}`);
const userProfiles: AngularFirestoreCollection<UserProfile> = this.fireStore.collection('userProfile/', ref => ref.where('email', '==', result.email));
const userProfiles$: Observable<UserProfile[]> = userProfiles.valueChanges();
userProfiles$.subscribe(res => {
if (res == null) {
await userProfile.set({ //here it shows error
id: userId,
email: result.email,
creationTime: moment().format(),
lastSignInTime: moment().format()
});
}
});
}
メイン関数は非同期ですが、await
として宣言されていない矢印関数でasync
を使用しています
userProfiles$.subscribe(async res => {
if (res == null) {
await userProfile.set({
...