'Async arrow function expected no return value
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;
Solution 1:[1]
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.
Solution 2:[2]
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.
Solution 3:[3]
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.
Solution 4:[4]
try to replace return to return undefined
Solution 5:[5]
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;
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | akram-adel |
Solution 2 | FortyTwo |
Solution 3 | terrymorse |
Solution 4 | Alberto_Timakov |
Solution 5 |