У меня есть база данных Firebase в реальном времени, база данных JSON, но не sql, у меня есть 5 полей в этой базе данных, в которых они хранятся:
field 1: STRING
field 2: STRING
field 3: STRING
field 4: STRING
field 5: ARRAY OF OBJECTS
, так что база данных с реальным примером выглядит примерно так this:
name: STRING
age: NUMBER
email: STRING
phoneNumber: STRING
skills: OBJECT[]
Теперь я загружаю всю эту информацию из базы данных в виде единственной переменной (var
) с именем snapshot.val()
. и затем обновлять все состояния, используя setState
сразу, как это:
this.setState({
state_name: snapshot.val().name,
state_age: snapshot.val().age,
state_email: snapshot.val().email,
state_phoneNumber: snapshot.val().phoneNumber,
state_skills: snapshot.val().skills
});
теперь этот оператор работает нормально, если все значения есть в базе данных, и он также работает нормально, если нет строк в базе данных, но он сталкивается с ошибкой, если поле навыков undefined
в базе данных.
Так что setState
не выдает ошибку, когда строки не определены, но выдает ошибку, когда массивы не определены. это случилось даже с простым строковым массивом. Теперь, если одно поле не существует и выдается ошибка, весь setState
завершается сбоем, поэтому в итоге, если несколько состояний обновляются одновременно и одно из состояний обновляется с ошибкой или исключением, все обновления завершаются неудачно и я обновлял такие деликатные данные с помощью отдельных операторов setState
, обновляя только одно состояние в своем собственном блоке try catch. Поэтому, чтобы обновить несколько состояний, которые могут обработать sh, я использую несколько блоков try catch. что-то вроде этого:
try {
this.setState({
ownerNameValue: snapshot.val().owner_name,
});
} catch {}
try {
this.setState({
phoneNumberValue: snapshot.val().phone_number,
});
} catch {}
try {
this.setState({
specialityValue: snapshot.val().specialty,
});
} catch {}
try {
if (snapshot.val().services != undefined) {
this.setState({
selectedOptionSerivce: snapshot.val().services,
});
}
} catch {}
try {
if (snapshot.val().home_service != undefined) {
this.setState({
selectedOption: snapshot.val().home_service,
});
}
} catch {}
Теперь есть ли более надежный и эффективный способ добиться этого?
Каким-то образом можно обновить все состояния одновременно, а не cra sh, если один из состояние имеет значение как неопределенное или просто терпит неудачу. Таким образом, состояния, которые не сталкиваются с проблемами, обновляются, но состояния, которые сталкиваются с исключениями и ошибками, просто отбрасываются без каких-либо ошибок.
, поэтому это будет что-то вроде этого:
field 1: STRING ->> state updated
field 2: STRING ->> state updated
field 3: STRING ->> state updated
field 4: STRING ->> state updated
field 5: undefined ->> state update FAILED (an array of objects was excepted)
ВНИМАНИЕ: этот вопрос не ограничивается базой данных о пожарных процессах, а setState
обрабатывает исключения и ошибки всех видов.