I'm building an application with Firebase oAuth. I followed all the instructions, but my code is returning an error saying that 'asyn arrow function expected no return value'.
I saw that there are multiple posts with the same title, but have not found an answer.
import firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/auth';
export const auth = firebase.auth();
export const firestore = firebase.firestore();
const config = {
apiKey: 'XXXXXXXXX',
authDomain: 'XXXXXXXXX',
projectId: 'XXXXXXXXX',
storageBucket: 'XXXXXXXXX',
messagingSenderId: 'XXXXXXXXX',
appId: 'XXXXXXXXX',
};
firebase.initializeApp(config);
export const createUserProfileDocument = async (userAuth, additionalData) => {
if (!userAuth) return;
const userRef = firestore.doc(`users/${userAuth.uid}`);
const snapShot = await userRef.get();
if (!snapShot.exists) {
const { displayName, email } = userAuth;
const createdAt = new Date();
try {
await userRef.set({
displayName,
email,
createdAt,
...additionalData,
});
} catch (error) {
console.log('error creating user', error.message);
}
}
return userRef;
};
const provider = new firebase.auth.GoogleAuthProvider();
provider.setCustomParameters({ prompt: 'select_account' });
export const signInWithGoogle = () => auth.signInWithPopup(provider);
export default firebase;
Change the first line from if (!userAuth) return
to if (!userAuth) return {}
, this should do the trick
Explanation
The error you're having says consistent-return
at the end, which basically means your function should consistently return the same type.
With that in mind, if we take a look at the first line in your function
if (!userAuth) return;
this line returns a void
, but the last line in the function is returning some other type
return userRef;
userRef
is definitely not of type void
and this is why you are having this error.
This rule requires return
statements to either always or never specify values.
Examples of INCORRECT code for this rule:
function doSomething(condition) {
if (condition) {
return true;
} else {
return;
}
}
function doSomething(condition) {
if (condition) {
return true;
}
}
Examples of CORRECT code for this rule:
function doSomething(condition) {
if (condition) {
return true;
} else {
return false;
}
}
If you want to disable this rule you can use this comment:
// eslint-disable-next-line consistent-return
return userRef;
The error message is telling you that an arrow function should always or never return a value. Look here
You have if (;userAuth) return;
and return userRef;
Change if (;userAuth) return {};
should fix the problem.
There is a violation of the eslint ' consistent-return ' rule in the code.
This code:
if (!userAuth) return;
returns undefined, while the last line of the arrow function:
return userRef;
};
returns userRef
.
The fix is to return something that isn't undefined in the first case.
try to replace return to return undefined
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.