pouchdb / react, установите значение состояния равным нулю, если в базе данных нет результата - PullRequest
0 голосов
/ 07 мая 2020

У меня есть блок кода, который отлично работает, пока что-то есть в базе данных, но это приводит к тому, что приложение ломает sh при первой загрузке, потому что нет набора результатов в базе данных на fre sh развернуть. Прямо сейчас, если я устанавливаю данные и загружаю этот экран, он получает набор результатов от pouchdb и получает do c, а затем устанавливает значения состояния на основе индексов документа.

Cuerrently при загрузке fre sh, я получаю сообщение об ошибке, что он не может прочитать свойство undefined для newBaselineDocs[0]

Мне нужно изменить это, чтобы, если нет результат из базы данных, то я вместо этого устанавливаю состояние этих значений на ноль по всем направлениям.

Например, если нет результата, то вместо ldl: newBaselineDocs[0].ldl я бы использовал ldl: 0, если это имеет смысл. Я знаю, что это будет что-то вроде if / else, но я действительно не знаю, как бы я сделал это с pouchdb result logi c.

setBaselineMax = () => {
    this.state.baselineDB.db.find({
      selector: {
        $and: [
          {_id: {"$gte": null}},
          {ldl: {$exists:true}},
          {hdl: {$exists:true}},
          {totalChol: {$exists:true}},
          {weight: {$exists:true}},
          {water: {$exists:true}},
          {sleep: {$exists:true}},
          {activity: {$exists:true}},
          {heartRate: {$exists:true}},
          {netCalories: {$exists:true}},
          {bloodPresure: {$exists:true}},
          {whiteCount: {$exists:true}},
          {redCount: {$exists:true}},
          {trig: {$exists:true}},
          {glucose: {$exists:true}},
          {oxygen: {$exists:true}},
          {psa: {$exists:true}},
          {alcohol: {$exists:true}},
          {createdAt: {$exists: true}}

        ]
      },
      fields: ['_id','ldl','hdl','totalChol','weight','water','sleep','activity','heartRate','netCalories','bloodPresure','whiteCount','redCount','trig','glucose','oxygen','psa', 'alcohol'],
      sort: [{'_id':'asc'}],
      limit: 1
    }).then(result => {
      console.log('baseline result');
      console.log(result);

      const newBaselineDocs = result.docs;

      console.log('this is basline data from app');
      console.log(newBaselineDocs);

      this.setState(prevState => ({
        baselineRecord: {                   // object that we want to update
            ...prevState.baselineRecord,    // keep all other key-value pairs
            ldl: newBaselineDocs[0].ldl,
            hdl: newBaselineDocs[0].hdl,
            totalChol: newBaselineDocs[0].totalChol,
            weight: newBaselineDocs[0].weight,
            water: newBaselineDocs[0].water,
            sleep: newBaselineDocs[0].sleep,
            activity: newBaselineDocs[0].activity,
            heartRate: newBaselineDocs[0].heartRate,
            netCalories: newBaselineDocs[0].netCalories,
            bloodPresure: newBaselineDocs[0].bloodPresure,
            whiteCount: newBaselineDocs[0].whiteCount,
            redCount: newBaselineDocs[0].redCount,
            trig: newBaselineDocs[0].trig,
            glucose: newBaselineDocs[0].glucose,
            oxygen: newBaselineDocs[0].oxygen,
            psa: newBaselineDocs[0].psa,
            alcohol: newBaselineDocs[0].alcohol     // update the value of specific key
        }
      }))

1 Ответ

2 голосов
/ 12 мая 2020

Это должно быть в комментарии, но это будет ужасный беспорядок. Ошибка ожидается, потому что result.docs пуст, тогда как ваш код предполагает, что он никогда не бывает пустым.

Поскольку newBaselineDocs пуст, потому что result.docs пуст, newBaselineDocs[0][someProperty] не определено.

Это легко исправить, просто проверьте, пуст ли result.docs, и если да, то инициализируйте свой подход «ноль по всем направлениям», например

// snip
}).then(result => {
  let doc;
  if(result.docs.length === 0) {
    // initialize doc with default values
    doc = {
      //  default property values
    };
  } 
  // do something with doc
});
...