Я использую аутентификацию Firebase для получения аутентификации пользователя и Firestore для базы данных, но не могу синхронизировать c между пользователем и его кампаниями.
Мне нужно передать идентификатор пользователя, чтобы получить его кампании. Но это действие вызывается, прежде чем у меня есть пользователь в магазине. Я попытался вставить обещание в действие пользователя Fetch, чтобы после возврата обещания он выполнял кампании. Я попробовал этот код:
let promise = new Promise((resolve, reject) => {
if (user.uid) {
console.log(`Done fetchUser ${user.uid}`);
commit("SET_LOGGED_IN", user !== null);
if (user) {
commit("SET_USER", {
displayName: user.displayName,
email: user.email,
id: user.uid,
photoUrl: user.photoURL,
});
const userProfile = {
uid: user.uid,
};
const role = {
role: isMobile,
}
firebase.firestore().collection("user_profile").doc(user.uid)
.set(userProfile, { merge: true });
firebase.firestore().collection("user_roles").doc(user.uid)
.set(role, { merge: true });
console.log('Resolving promise');
resolve(user);
} else {
commit("SET_USER", null);
console.log('Rejecting promise');
reject();
}
}
});
return promise;
},
Я вызвал это действие при изменении аутентификации. и действие кампании:
campaigns: firestoreAction(({ bindFirestoreRef, getters }) => {
//return the promise returned by `bindFirestoreRef`
let user = getters.user;
let promise = dispatch('fetchUser', {user});
console.log(`promise is ${promise}`);
promise.then(function(user) {
return bindFirestoreRef(
'campaigns',
firebase.firestore().collection(`user_profile`).doc(getters.user.data.id).collection("campaigns"))
});
return promise;
}),
и вызвало действие кампании на странице созданной функции.
Но не получите результата и ошибки. Как вызвать обещание внутри обещания?