0

Here is my code that is running multiple loops and taking forever to finish.

  ratingChanged(altHash, newRating, event) {
    var alt_md5hash = altHash;
    var userRateID = this.state.userID;
    // console.log("RATING HASH: ", altHash);
    // console.log("RATING: ", newRating);
    // console.log("userRateID: ", userRateID);

    // Update/Add unique note ratings by user
    var newRateKey = firebase.database().ref('notes/' + alt_md5hash).push().key;
    var updates = {};
    updates['notes/' + alt_md5hash + "/RatingsByUsers/" + userRateID] = newRating;
    firebase.database().ref().update(updates);

    // Count number of ratings and average
    var numRatings = 0;
    var sumRatings = 0;
    var notesDBRate = firebase.database().ref('notes/' + alt_md5hash + "/RatingsByUsers");
    notesDBRate.on('value', function(noteSnapshot) {
      noteSnapshot.forEach(function(childSnapshot) {
        numRatings += 1;
        sumRatings += childSnapshot.val();
        console.log("numRatings1: ", numRatings);
        console.log("sumRatings2: ", sumRatings);
      }.bind(this));
      var averageRating = sumRatings / parseFloat(numRatings); // force float
      console.log("==========AVG RATE: ", averageRating);
      var updateRateNum = {};
      updateRateNum['notes/' + alt_md5hash + "/uniqueRatings"] = numRatings;
      updateRateNum['notes/' + alt_md5hash + "/starRating"] = averageRating;
      console.log("UPDATED!!!!!!!!!!!!!!!!!!!!!");
      firebase.database().ref().update(updateRateNum); 
    }.bind(this));  

    //Add download number to reference of note
    var ownerID = "";
    var notesDB = firebase.database().ref('notes/' + alt_md5hash);
    notesDB.on('value', function(noteSnapshot) {
      ownerID = noteSnapshot.val().ownerID;
      var rateSum = noteSnapshot.val().uniqueRatings;
      var rateAvg = noteSnapshot.val().starRating;
      console.log("ownerID REAL: ", ownerID);

      var updateOwnerRating = {};
      updateOwnerRating['userNotes/' + ownerID + "/" + alt_md5hash + "/uniqueRatings"] = rateSum;
      updateOwnerRating['userNotes/' + ownerID + "/" + alt_md5hash + "/starRating"] = rateAvg;
      firebase.database().ref().update(updateOwnerRating);
    }.bind(this)); 

    //update user's total downloads
    var avgUserNoteRating = 0;
    var avgUserNoteRatingCount = 0;
    console.log("OWNERID READ 2nd: ", ownerID);
    var ownerDB = firebase.database().ref('userNotes/' + ownerID);
    ownerDB.on('value', function(ownerSnapshot) {
      ownerSnapshot.forEach(function(childSnapshot) {
        avgUserNoteRating += childSnapshot.val().starRating;
        avgUserNoteRatingCount += 1;
        console.log("inner1: ", avgUserNoteRating);
        console.log("inner2: ", avgUserNoteRatingCount);
      }.bind(this));
      // update USER total rating
      var allAroundRating = avgUserNoteRating/parseFloat(avgUserNoteRatingCount) || 0;
      console.log("==========allAroundRating: ", allAroundRating);
      console.log("UPDATING SECOND :))))))))))))))))");
      var updateTotalUserRatings = {};
      updateTotalUserRatings['users/' + ownerID + "/holisticUserNoteRating"] = allAroundRating;
      firebase.database().ref().update(updateTotalUserRatings); 
    }.bind(this));
  }

Here is my console.log for people to follow.

Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  618.4470238095238
Notefeed.js:221 inner2:  201
Notefeed.js:220 inner1:  623.4470238095238
Notefeed.js:221 inner2:  202
Notefeed.js:220 inner1:  625.1970238095238
Notefeed.js:221 inner2:  203
Notefeed.js:220 inner1:  625.6970238095238
Notefeed.js:221 inner2:  204
Notefeed.js:220 inner1:  628.6970238095238
Notefeed.js:221 inner2:  205
Notefeed.js:225 ==========allAroundRating:  3.06681475029036
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  529.1053571428572
Notefeed.js:221 inner2:  171
Notefeed.js:220 inner1:  534.1053571428572
Notefeed.js:221 inner2:  172
Notefeed.js:220 inner1:  535.8553571428572
Notefeed.js:221 inner2:  173
Notefeed.js:220 inner1:  536.3553571428572
Notefeed.js:221 inner2:  174
Notefeed.js:220 inner1:  539.3553571428572
Notefeed.js:221 inner2:  175
Notefeed.js:225 ==========allAroundRating:  3.0820306122448984
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  360.8220238095238
Notefeed.js:221 inner2:  116
Notefeed.js:220 inner1:  365.8220238095238
Notefeed.js:221 inner2:  117
Notefeed.js:220 inner1:  367.5720238095238
Notefeed.js:221 inner2:  118
Notefeed.js:220 inner1:  368.0720238095238
Notefeed.js:221 inner2:  119
Notefeed.js:220 inner1:  371.0720238095238
Notefeed.js:221 inner2:  120
Notefeed.js:225 ==========allAroundRating:  3.092266865079365
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  236.31755952380954
Notefeed.js:221 inner2:  76
Notefeed.js:220 inner1:  241.31755952380954
Notefeed.js:221 inner2:  77
Notefeed.js:220 inner1:  243.06755952380954
Notefeed.js:221 inner2:  78
Notefeed.js:220 inner1:  243.56755952380954
Notefeed.js:221 inner2:  79
Notefeed.js:220 inner1:  246.56755952380954
Notefeed.js:221 inner2:  80
Notefeed.js:225 ==========allAroundRating:  3.0820944940476194
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  95.50992063492063
Notefeed.js:221 inner2:  31
Notefeed.js:220 inner1:  100.50992063492063
Notefeed.js:221 inner2:  32
Notefeed.js:220 inner1:  102.25992063492063
Notefeed.js:221 inner2:  33
Notefeed.js:220 inner1:  102.75992063492063
Notefeed.js:221 inner2:  34
Notefeed.js:220 inner1:  105.75992063492063
Notefeed.js:221 inner2:  35
Notefeed.js:225 ==========allAroundRating:  3.0217120181405894
Notefeed.js:226 UPDATING SECOND :))))))))))))))))


(DELETED A CHUNK SO FITS INSIDE STACKOVERFLOW CHARACTER LIMIT)

Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:203 ownerID REAL:  vbHQ2aiIekap6AqLGiwEHVRprhV2
Notefeed.js:220 inner1:  905.1553571428574
Notefeed.js:221 inner2:  296
Notefeed.js:220 inner1:  910.1553571428574
Notefeed.js:221 inner2:  297
Notefeed.js:220 inner1:  912.0839285714288
Notefeed.js:221 inner2:  298
Notefeed.js:220 inner1:  912.5839285714288
Notefeed.js:221 inner2:  299
Notefeed.js:220 inner1:  915.5839285714288
Notefeed.js:221 inner2:  300
Notefeed.js:225 ==========allAroundRating:  3.0519464285714295
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  874.4053571428574
Notefeed.js:221 inner2:  286
Notefeed.js:220 inner1:  879.4053571428574
Notefeed.js:221 inner2:  287
Notefeed.js:220 inner1:  881.3339285714288
Notefeed.js:221 inner2:  288
Notefeed.js:220 inner1:  881.8339285714288
Notefeed.js:221 inner2:  289
Notefeed.js:220 inner1:  884.8339285714288
Notefeed.js:221 inner2:  290
Notefeed.js:225 ==========allAroundRating:  3.051151477832513
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  770.4886904761905
Notefeed.js:221 inner2:  251
Notefeed.js:220 inner1:  775.4886904761905
Notefeed.js:221 inner2:  252
Notefeed.js:220 inner1:  777.417261904762
Notefeed.js:221 inner2:  253
Notefeed.js:220 inner1:  777.917261904762
Notefeed.js:221 inner2:  254
Notefeed.js:220 inner1:  780.917261904762
Notefeed.js:221 inner2:  255
Notefeed.js:225 ==========allAroundRating:  3.062420634920635
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  709.1345238095239
Notefeed.js:221 inner2:  231
Notefeed.js:220 inner1:  714.1345238095239
Notefeed.js:221 inner2:  232
Notefeed.js:220 inner1:  716.0630952380953
Notefeed.js:221 inner2:  233
Notefeed.js:220 inner1:  716.5630952380953
Notefeed.js:221 inner2:  234
Notefeed.js:220 inner1:  719.5630952380953
Notefeed.js:221 inner2:  235
Notefeed.js:225 ==========allAroundRating:  3.061970618034448
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  633.4470238095238
Notefeed.js:221 inner2:  206
Notefeed.js:220 inner1:  638.4470238095238
Notefeed.js:221 inner2:  207
Notefeed.js:220 inner1:  640.3755952380952
Notefeed.js:221 inner2:  208
Notefeed.js:220 inner1:  640.8755952380952
Notefeed.js:221 inner2:  209
Notefeed.js:220 inner1:  643.8755952380952
Notefeed.js:221 inner2:  210
Notefeed.js:225 ==========allAroundRating:  3.0660742630385487
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  544.1053571428572
Notefeed.js:221 inner2:  176
Notefeed.js:220 inner1:  549.1053571428572
Notefeed.js:221 inner2:  177
Notefeed.js:220 inner1:  551.0339285714286
Notefeed.js:221 inner2:  178
Notefeed.js:220 inner1:  551.5339285714286
Notefeed.js:221 inner2:  179
Notefeed.js:220 inner1:  554.5339285714286
Notefeed.js:221 inner2:  180
Notefeed.js:225 ==========allAroundRating:  3.080744047619048
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  375.8220238095238
Notefeed.js:221 inner2:  121
Notefeed.js:220 inner1:  380.8220238095238
Notefeed.js:221 inner2:  122
Notefeed.js:220 inner1:  382.75059523809523
Notefeed.js:221 inner2:  123
Notefeed.js:220 inner1:  383.25059523809523
Notefeed.js:221 inner2:  124
Notefeed.js:220 inner1:  386.25059523809523
Notefeed.js:221 inner2:  125
Notefeed.js:225 ==========allAroundRating:  3.090004761904762
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  251.31755952380954
Notefeed.js:221 inner2:  81
Notefeed.js:220 inner1:  256.31755952380956
Notefeed.js:221 inner2:  82
Notefeed.js:220 inner1:  258.246130952381
Notefeed.js:221 inner2:  83
Notefeed.js:220 inner1:  258.746130952381
Notefeed.js:221 inner2:  84
Notefeed.js:220 inner1:  261.746130952381
Notefeed.js:221 inner2:  85
Notefeed.js:225 ==========allAroundRating:  3.0793662464986
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  110.50992063492063
Notefeed.js:221 inner2:  36
Notefeed.js:220 inner1:  115.50992063492063
Notefeed.js:221 inner2:  37
Notefeed.js:220 inner1:  117.43849206349206
Notefeed.js:221 inner2:  38
Notefeed.js:220 inner1:  117.93849206349206
Notefeed.js:221 inner2:  39
Notefeed.js:220 inner1:  120.93849206349206
Notefeed.js:221 inner2:  40
Notefeed.js:225 ==========allAroundRating:  3.0234623015873017
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:225 ==========allAroundRating:  3.059814484126984
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  845.9964285714286
Notefeed.js:221 inner2:  276
Notefeed.js:220 inner1:  850.9964285714286
Notefeed.js:221 inner2:  277
Notefeed.js:220 inner1:  853.0901785714286
Notefeed.js:221 inner2:  278
Notefeed.js:220 inner1:  853.5901785714286
Notefeed.js:221 inner2:  279
Notefeed.js:220 inner1:  856.5901785714286
Notefeed.js:221 inner2:  280
Notefeed.js:225 ==========allAroundRating:  3.059250637755102
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  770.3089285714285
Notefeed.js:221 inner2:  251
Notefeed.js:220 inner1:  775.3089285714285
Notefeed.js:221 inner2:  252
Notefeed.js:220 inner1:  777.4026785714285
Notefeed.js:221 inner2:  253
Notefeed.js:220 inner1:  777.9026785714285
Notefeed.js:221 inner2:  254
Notefeed.js:220 inner1:  780.9026785714285
Notefeed.js:221 inner2:  255
Notefeed.js:225 ==========allAroundRating:  3.062363445378151
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  680.9672619047619
Notefeed.js:221 inner2:  221
Notefeed.js:220 inner1:  685.9672619047619
Notefeed.js:221 inner2:  222
Notefeed.js:220 inner1:  688.0610119047619
Notefeed.js:221 inner2:  223
Notefeed.js:220 inner1:  688.5610119047619
Notefeed.js:221 inner2:  224
Notefeed.js:220 inner1:  691.5610119047619
Notefeed.js:221 inner2:  225
Notefeed.js:225 ==========allAroundRating:  3.0736044973544976
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  512.6839285714286
Notefeed.js:221 inner2:  166
Notefeed.js:220 inner1:  517.6839285714286
Notefeed.js:221 inner2:  167
Notefeed.js:220 inner1:  519.7776785714286
Notefeed.js:221 inner2:  168
Notefeed.js:220 inner1:  520.2776785714286
Notefeed.js:221 inner2:  169
Notefeed.js:220 inner1:  523.2776785714286
Notefeed.js:221 inner2:  170
Notefeed.js:225 ==========allAroundRating:  3.078103991596639
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  388.17946428571435
Notefeed.js:221 inner2:  126
Notefeed.js:220 inner1:  393.17946428571435
Notefeed.js:221 inner2:  127
Notefeed.js:220 inner1:  395.27321428571435
Notefeed.js:221 inner2:  128
Notefeed.js:220 inner1:  395.77321428571435
Notefeed.js:221 inner2:  129
Notefeed.js:220 inner1:  398.77321428571435
Notefeed.js:221 inner2:  130
Notefeed.js:225 ==========allAroundRating:  3.067486263736264
Notefeed.js:226 UPDATING SECOND :))))))))))))))))
Notefeed.js:220 inner1:  247.37182539682541
Notefeed.js:221 inner2:  81
Notefeed.js:220 inner1:  252.37182539682541
Notefeed.js:221 inner2:  82
Notefeed.js:220 inner1:  254.46557539682541
Notefeed.js:221 inner2:  83
Notefeed.js:220 inner1:  254.96557539682541
Notefeed.js:221 inner2:  84
Notefeed.js:220 inner1:  257.96557539682544
Notefeed.js:221 inner2:  85
Notefeed.js:225 ==========allAroundRating:  3.0348891223155934
Notefeed.js:226 UPDATING SECOND :))))))))))))))))

It seems when this ratingFunction is activated (by clicking on a Star), the code (especially the "ON Value" part) is triggering, reading and updating, but since it is updating, it is re-reading again.

Don't know where the problem(s) specifically is so anyone who sees the error, please let me know.

1 Answer 1

1

If you're updating a node in the same code that you're receiving the updated values, this sounds like the expected behavior to me.

If you're trying to update a node based on its current value, you'll want to use a transaction instead. A transaction combines the reading of the current value and the writing of the new value, into a single operation. See https://firebase.google.com/docs/database/web/read-and-write#save_data_as_transactions

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.