【问题标题】:pouchdb/react, set state value to zero if no result is in the databasepouchdb/react,如果数据库中没有结果,则将状态值设置为零
【发布时间】:2020-05-15 01:01:56
【问题描述】:

只要数据库中有内容,我就有一段代码可以完美运行,但这会导致应用程序在首次加载时崩溃,因为在新部署的数据库中没有结果集。现在,如果我设置数据并加载此屏幕,它会从 pouchdb 获取结果集并获取文档,然后根据文档索引设置状态值。

现在在新加载时,我收到错误,它无法读取 newBaselineDocs[0] 的 undefined 属性

我需要更改它,以便如果数据库没有结果,那么我将这些值的状态设置为零。

例如,如果没有结果,那么我会使用ldl: 0 而不是ldl: 0。我知道这类似于 if/else,但我真的不知道如何使用 pouchdb 结果逻辑来做到这一点。

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

【问题讨论】:

    标签: reactjs pouchdb


    【解决方案1】:

    这应该在评论中,但它会是一个丑陋的混乱。该错误是意料之中的,因为 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
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 2016-01-02
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多