Я использую реагирующий натив, и я только что перенес некоторые функции базы данных в отдельный файл, вместо того, чтобы просто поместить их в нужные мне файлы (я начал использовать одни и те же функции в нескольких файлах, и я 'Я предпочел бы иметь их всех в одном месте).Проблема в том, что функция, которая должна сравнивать одноразовый ключ с ключом в базе данных, всегда возвращает undefined .
Я пытался вернуть функции вместо логических значений и пыталсяиспользуйте ключевые слова "async / await" (о которых я очень мало знаю).
Вот мой код ...
/ project / src / components / Database.js
var firebase = require('firebase');
if (!firebase.apps.length) {
firebase.initializeApp({
apiKey: "key",
authDomain: "domain",
databaseURL: "url",
storageBucket: "bucket",
});
}
class Database {
constructor() {
this.codesRef = firebase.database().ref('codes');
}
isValidCode(text) {
let codeIsFound = false;
let identifier = "";
this.codesRef.once('value', (db_snapshot) => {
db_snapshot.forEach((code_snapshot) => {
//console.log(text, code_snapshot.val().value, text == code_snapshot.val().value);
if (text == code_snapshot.val().value) {
codeIsFound = true;
identifier = code_snapshot.key;
}
});
//console.log(codeIsFound); // this is correct
return codeIsFound; // this always returns undefined
});
};
}
module.exports = Database;
/ project / src / components / forms / KeyForm.js
import React from 'react';
import {
StyleSheet,
View,
TextInput,
} from 'react-native';
import { withNavigation } from 'react-navigation';
import database from '../Database.js';
const db = new database();
class LoginForm extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<View style={styles.container}>
<TextInput
style={styles.input}
placeholder="Access Code"
returnKeyType="go"
onSubmitEditing={text => {console.log(db.validCode(text.nativeEvent.text))}} // "undefined"
autoCapitalize="none"
autoCorrect={false}
/>
</View>
);
}
}
const styles = StyleSheet.create({\
// yay styles :)
});
export default withNavigation(LoginForm);
Всякий раз, когда я ставлю инструкцию возврата после функция firebase "Once" возвращает логическое значение, но по какой-то причине оно всегда ложно.Любая помощь с благодарностью!