javascript - एक लंबी अवधि के लिए टाइमर सेट करना, यानी कई मिनट




firebase react-native (4)

मैं Login और Signup लिए प्रतिक्रिया मूल के साथ फायरबेस एथ का उपयोग करना चाहता हूं लेकिन मुझे पीला त्रुटि मिली है:

लंबे समय तक टाइमर सेट करना, यानी कई मिनट, एंड्रॉइड पर एक प्रदर्शन और शुद्धता मुद्दा है क्योंकि यह टाइमर मॉड्यूल जागता रहता है, और टाइमर केवल अग्रभूमि में होने पर ही कॉल किया जा सकता है। अधिक जानकारी के लिए देखें ( https://github.com/facebook/react-native/issues/12981 )। (अवधि 111862ms के साथ सेटटाइमआउट देखा)

मैं कैसे इसे ठीक कर सकता हूं?
मैं इसे अनदेखा नहीं करना चाहता, मैं इस त्रुटि को समझना चाहता हूं और इसे सर्वोत्तम और मानक तरीके से हल करना चाहता हूं।
और यह मेरा कोड है:

  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>
            )
        }
    }

मैंने Google फ़ायरबेस टीम को रिपोर्ट किया: ( https://github.com/firebase/firebase-js-sdk/issues/97 )


Google Said पर जोश क्रोथर सॉफ्टवेयर इंजीनियर:

मल्टी-स्टेप शॉर्ट अवधि सेट का उपयोग करना टाइमटाइम वास्तव में समस्या को ठीक नहीं करता है। टाइमर मॉड्यूल अभी भी सक्रिय रहता है और ऐप अभी भी चेतावनी में दर्शाए गए प्रदर्शन समस्याओं के अधीन है। यहां मुद्दा यह है कि, हमने उन मामलों का उपयोग किया है जिनके लिए लंबे समय की आवश्यकता होती है, और प्रतिक्रिया-मूल उस उपयोग के मामले के अनुकूल नहीं है।

तो उन सभी का नेट: यह बग यहां तय नहीं किया जा सकता है, हम केवल त्रुटि के आसपास काम कर सकते हैं, वहां वर्कअराउंड उपलब्ध हैं (देखें कि लंबे समय तक टाइमर सेट करना, यानी कई मिनट ) जो चेतावनी को अक्षम करते हैं। हमारे कोड में चेतावनी को अक्षम करने के लिए काम करने से, समस्या (चेतावनी को अक्षम करने से परे) में मदद नहीं मिलती है, और अतिरिक्त एसडीके कोड / वजन जोड़ता है जो पूरी तरह से अनावश्यक है।

मैं ऊपर उल्लिखित मुद्दे (यानी फेसबुक / प्रतिक्रिया-मूल # 12 9 81) पर चिमिंग की अनुशंसा करता हूं यदि आप सुविधाजनक नहीं हैं / उपलब्ध कराए गए कामकाज


एक अन्य दृष्टिकोण प्रतिक्रिया-देशी-अनदेखा-चेतावनी मॉड्यूल का उपयोग करना है।

https://github.com/jamrizzi/react-native-ignore-warnings

https://www.npmjs.com/package/react-native-ignore-warnings

यह एक्सपो ऐप्स के लिए भी काम करता है।

आप इसे निम्न तरीके से उपयोग करेंगे। । ।

import ignoreWarnings from 'react-native-ignore-warnings';

ignoreWarnings('Setting a timer');

यह पीले बॉक्स और कंसोल लॉग को हल करता है। यह एक्सपो के लिए भी इसे ठीक करता है।

बस अपने कोडबेस की शुरुआत में निम्न स्क्रिप्ट रखें।

import { YellowBox } from 'react-native';
import _ from 'lodash';

YellowBox.ignoreWarnings(['Setting a timer']);
const _console = _.clone(console);
console.warn = message => {
  if (message.indexOf('Setting a timer') <= -1) {
    _console.warn(message);
  }
};

login() , आपके setTimeout() कॉल में अंतराल मान गुम है। एक सामान्य के रूप में, ब्राउज़र अब विंडो / टैब पृष्ठभूमि में है, या कम से कम समय पर होने की उम्मीद नहीं है, तो ब्राउज़र टाइमआउट / अंतराल को नहीं चलाते हैं। यह अपमानजनक लिपि व्यवहार को रोकने के लिए है, और मतदान की जा रही स्क्रिप्ट द्वारा बिजली की खपत को कम करने के लिए है।

आपका कोड सिद्धांत रूप से काम करना चाहिए, यदि टाइमर चल रहा है, तो उपयोगकर्ता खिड़की से दूर स्विच करता है, जब वे वापस आते हैं तो यह पूरा हो जाएगा। यह संभव है कि आप एक यूएक्स बिंदु दृश्य से क्या चाहते हैं, क्योंकि उपयोगकर्ता पृष्ठभूमि में होने के बजाए संक्रमण को देखते हुए संक्रमण को देखते हैं। यह उन्हें मानसिक संदर्भ बनाए रखने में मदद करता है।

पीला बॉक्स इसलिए है क्योंकि आप संदेश के अनुसार अत्यधिक लंबे टाइमर सेट कर रहे हैं (लगभग दो मिनट) और यह प्रासंगिक रूप से होने की संभावना नहीं है कि आप क्या चाहते हैं। जेएस पर्यावरण आपको चेतावनी दे रहा है कि आप जो भी कर रहे हैं वह संभवतः आपके इरादे से नहीं है। यदि आप चाहते हैं तो आप चेतावनी को म्यूट कर सकते हैं।





react-native