No More Posting New Topics!

If you have a question or an issue, please start a thread in our Github Discussions Forum.
This forum is closed for new threads/ topics.

Navigation

    Quasar Framework

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Loading a value using Transaction in Dexie

    Help
    2
    7
    174
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      cynderkromi last edited by

      I have an application where I store a Persons ID in one table, done from one Quasar page. Then I have another Quasar page that needs to retrieve that value from the table, and query another table (people) to get all the person’s data in the people table.

      I am using a Dexie transaction to do this, and when I output the values into the console I can see the values just fine. Until I try to store the value into a variable, then things break, and I’m not sure what’s going wrong.

      The line: this.aPersonID.push(theOne.p_key) Is not working. When I include that in my code, the line below it (the console.log) does not get written. When I comment that out, the console.log below it does get written out.

      I’m not sure what I need to fix? Thanks.

      import Dexie from 'dexie';
      var pawTapDB = new Dexie('pawTapDB')
      pawTapDB.version(1.5).stores({
              peopleTable: '++p_key,l_name,p_email',
              tableHoldPersonID: '++thpid_key',
              dogTable: '++p_dog,callName',
          })
          
          
      export default {
        name: 'PeopleDetails',
        data() {
          return {
            thePersonsIDis: [],
            aPersonID: '',
      
            personOBJID: [],
            thePersonFromPeople: ''
        }
        
        methods: {
      
        theGetPeopleMethod() {
          console.log("     People Details: theGetPeopleMethod START ")
          pawTapDB.transaction('r', pawTapDB.tableHoldPersonID, pawTapDB.peopleTable, () => {
            console.log("     People Details: theGetPeopleMethod transaction started  ")
      
            pawTapDB.tableHoldPersonID.each( function (friend) {  
              console.log("     People Details: theGetPeopleMethod in friend RETURN A ", friend) 
      
                repawTapDB.peopleTable.where({p_key: friend.personID}).each( function (theOne) {
                  console.log("     People Details: theGetPeopleMethod theOne: ", theOne.p_key, theOne)
                  this.aPersonID.push(theOne.p_key) ///. ***** this doesn't work
                  //return this.aPersonID = this.theOne.p_key
                  console.log("     People Details: theGetPeopleMethod in friend RETURN B  ", friend) 
                })
            })
          }).then(() => {
              console.log("     People Details: Transaction committed")
      
          }).catch(err => {
              console.log("     People Details: Transaction aborted")
      
          })
        }
      }
      
      beets 1 Reply Last reply Reply Quote 0
      • beets
        beets @cynderkromi last edited by

        @cynderkromi said in Loading a value using Transaction in Dexie:

        aPersonID: ‘’

        This is a string but you’re trying to push into it. Do you mean to make it aPersonID: [], ?

        C 1 Reply Last reply Reply Quote 0
        • C
          cynderkromi @beets last edited by cynderkromi

          @beets even if I make it an array, the value still doesn’t get loaded into aPersonID, and the “Return B” console log doesn’t appear in the console. So I’m not sure what syntax I’m doing wrong.

          beets 1 Reply Last reply Reply Quote 0
          • beets
            beets @cynderkromi last edited by

            @cynderkromi Looking at it again, it’s probably due to the callbacks not using arrow functions. See below, I only changed the two lines with use arrow function comment. When not using arrow functions, the value of this changes and would no longer point to the Vue data object. Hopefully this solves the issue.

              theGetPeopleMethod() {
                console.log("     People Details: theGetPeopleMethod START ")
                pawTapDB.transaction('r', pawTapDB.tableHoldPersonID, pawTapDB.peopleTable, () => {
                  console.log("     People Details: theGetPeopleMethod transaction started  ")
            
                  pawTapDB.tableHoldPersonID.each( (friend) => { // use arrow function  
                    console.log("     People Details: theGetPeopleMethod in friend RETURN A ", friend) 
            
                      repawTapDB.peopleTable.where({p_key: friend.personID}).each( (theOne) => { // use arrow function
                        console.log("     People Details: theGetPeopleMethod theOne: ", theOne.p_key, theOne)
                        this.aPersonID.push(theOne.p_key) ///. ***** this doesn't work
                        //return this.aPersonID = this.theOne.p_key
                        console.log("     People Details: theGetPeopleMethod in friend RETURN B  ", friend) 
                      })
                  })
                }).then(() => {
                    console.log("     People Details: Transaction committed")
            
                }).catch(err => {
                    console.log("     People Details: Transaction aborted")
            
                })
              }
            
            C 1 Reply Last reply Reply Quote 0
            • C
              cynderkromi @beets last edited by

              @beets Thank you so much! That works! I was under the impression that the => and the function were interchangeable. Now I know they are not.

              beets 1 Reply Last reply Reply Quote 0
              • beets
                beets @cynderkromi last edited by

                @cynderkromi Correct, the main different is what the value of this will be when using a regular function vs arrow. In the olden days before arrow functions you’d see this a lot (which would still work):

                  theGetPeopleMethod() {
                    const that = this // store this reference
                
                    console.log("     People Details: theGetPeopleMethod START ")
                    pawTapDB.transaction('r', pawTapDB.tableHoldPersonID, pawTapDB.peopleTable, () => {
                      console.log("     People Details: theGetPeopleMethod transaction started  ")
                
                      pawTapDB.tableHoldPersonID.each( function (friend) {  
                        console.log("     People Details: theGetPeopleMethod in friend RETURN A ", friend) 
                
                          repawTapDB.peopleTable.where({p_key: friend.personID}).each( function (theOne) {
                            console.log("     People Details: theGetPeopleMethod theOne: ", theOne.p_key, theOne)
                            that.aPersonID.push(theOne.p_key) ///. ***** use that instead of this
                            //return that.aPersonID = that.theOne.p_key
                            console.log("     People Details: theGetPeopleMethod in friend RETURN B  ", friend) 
                          })
                      })
                    }).then(() => {
                        console.log("     People Details: Transaction committed")
                
                    }).catch(err => {
                        console.log("     People Details: Transaction aborted")
                
                    })
                  }
                
                

                Notice the use of that.aPersonID.push(theOne.p_key) instead of this

                C 1 Reply Last reply Reply Quote 0
                • C
                  cynderkromi @beets last edited by

                  @beets Thanks so much! It works great now.

                  1 Reply Last reply Reply Quote 1
                  • First post
                    Last post