Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting a timer for a long period of time, i.e. multiple minutes

I want to use firebase auth with react native for Login and Signup but I got a yellow error:

Setting a timer for a long period of time, i.e. multiple minutes, is a performance and correctness issue on Android as it keeps the timer module awake, and timers can only be called when the app is in the foreground. See (https://github.com/facebook/react-native/issues/12981) for more info. (Saw setTimeout with duration 111862ms)

How Can I Fix That?
I don't want to ignore that, I want to understand this error and solve that with the best and Standard way.
And This is my Code:

  export default class Login extends Component {         constructor(props) {             super(props)             this.state = {                 email: '',                 password: '',                 response: ''             }             this.signUp = this.signUp.bind(this)             this.login = this.login.bind(this)         }         async signUp() {             try {                 await firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)                 this.setState({                     response: 'Account Created!'                 })                 setTimeout(() => {                     this.props.navigator.push({                         id: 'App'                     })                 }, 1500)             } catch (error) {                 this.setState({                     response: error.toString()                 })             }         }         async login() {             try {                 await firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password)                 this.setState({                     response: 'user login in'                 })                 setTimeout(() => {                     this.props.navigator.push({                         id: 'App'                     })                 })              } catch (error) {                 this.setState({                     response: error.toString()                 })             }          }         render() {             return (                 <View style={styles.container}>                     <View style={styles.containerInputes}>                         <TextInput                             placeholderTextColor="gray"                             placeholder="Email"                             style={styles.inputText}                           //  onChangeText={(email) => this.setState({ email })}                             onChangeText={(email) => {console.log(email);}}                         />                         <TextInput                             placeholderTextColor="gray"                             placeholder="Password"                             style={styles.inputText}                             password={true}                             onChangeText={(password) => this.setState({ password })}                         />                     </View>                     <TouchableHighlight                         onPress={this.login}                         style={[styles.loginButton, styles.button]}                     >                         <Text                             style={styles.textButton}                         >Login</Text>                     </TouchableHighlight>                     <TouchableHighlight                         onPress={this.signUp}                         style={[styles.loginButton, styles.button]}                     >                         <Text                             style={styles.textButton}                         >Signup</Text>                     </TouchableHighlight>                 </View>             )         }     } 

I Reported to Google Firebase Team: (https://github.com/firebase/firebase-js-sdk/issues/97)

like image 619
Saeed Heidarizarei Avatar asked Jun 17 '17 10:06

Saeed Heidarizarei


1 Answers

To fix this issue...

  1. Navigate to your node_modules/react-native/Libraries/Core/Timers/JSTimers.js file.

  2. Look for the variable MAX_TIMER_DURATION_MS

  3. Change its value to 10000 * 1000

  4. Save the changes (with auto format turned off) and re-build your app.

Found this answer on https://github.com/firebase/firebase-js-sdk/issues/97#issuecomment-485410026

like image 165
CLUTCHER Avatar answered Sep 29 '22 22:09

CLUTCHER