Why when at first function UpdateValueMapBalances works, instead of ReadValueBalances ?!
JS Code:
'use strict'; // The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers. const FBfunctions = require('firebase-functions'); // The Firebase Admin SDK to access the Firebase Realtime Database. const admin = require('firebase-admin'); admin.initializeApp(); exports.UpdateBalancesUser = FBfunctions.database.ref('/{userID}/Movements').onWrite((MoveDataChange, context) => { const UserID = String(context.params.userID); const BalanceRef = admin.database().ref('/'+ UserID +'/Balances') ; var Date_first, Date_last; var Value_first = 0; var Value_last = 0; var TypeofChange = 0; MoveDataChange.after.forEach((childMove) => { if (!childMove.exists()) { console.log('MoveDataChange.after: Π½Π΅Ρ!'); //return false; //Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ } Date_last = childMove.child('dateInMilisec').val(); Value_last = childMove.child("value").val()*childMove.child("kind").val(); console.log('Date_last: ', Date_last, '. Value_last: ', Value_last); TypeofChange = TypeofChange +1; //return true; }); MoveDataChange.before.forEach((childMove) => { if (!childMove.exists()) { console.log('MoveDataChange.before: Π½Π΅Ρ!'); //return false; //Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ } Date_first = childMove.child('dateInMilisec').val(); Value_first = -childMove.child("value").val()*childMove.child("kind").val(); //Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ Π·Π½Π°ΠΊΠΎΠΌ, Ρ.ΠΊ. Π΅Π³ΠΎ Π½Π΅ ΡΡΠ°Π»ΠΎ console.log('Date_first: ', Date_first, '. Value_first: ', Value_first); TypeofChange = TypeofChange - 1; //return true; }); console.log('TypeofChange: ', TypeofChange); if (TypeofChange < 0) { // ΡΠ΄Π°Π»ΠΈΠ»ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Date_last = Date_first; Value_last = 0; } if (TypeofChange > 0) { // Π½ΠΎΠ²ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Date_first = Date_last; Value_first = Value_last; Value_last = 0; } if (Date_first > Date_last) { //ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ let Date_tmp = Date_first; Date_first = Date_last; Date_last = Date_tmp; let Value_tmp = Value_first; Value_first = Value_last; Value_last = Value_tmp; } let BalanceMap = new Map; let BalanceMapUpdate = new Map; return ReadValueBalances(Date_first, BalanceRef) .then(UpdateValueMapBalances(BalanceMap, Date_first, Date_last, Value_first, Value_last)) .then((BalanceMapUpdate)=>{ return BalanceRef.update(BalanceMapUpdate, ()=>{ console.log('ΠΠ°ΠΏΠΈΡΠ°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ', BalanceMapUpdate); }) }); }); function ReadValueBalances(Date_1, BalanceRef){ var BalancesMap = new Map; return BalanceRef.orderByKey().startAt(String(Date_1)).once('value') // ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΠ ΠΏΠΎΡΠ»Π΅ Π΄Π°ΡΡ Π·Π°ΠΏΠΈΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ .then((DataSnapShot)=>{ console.log('ReadValueBalances ΠΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΡ ΠΎΡ ', Date_1); if (!DataSnapShot.exists()) { // Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π΄Π°ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ, ΡΠΎ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ Π΄Π°ΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ console.log('ReadValueBalances ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π·Π°ΠΏΠΈΡΡ'); return BalanceRef.orderByKey().endAt(String(Date_1)).limitToLast(1).once('value'); } else { console.log('ReadValueBalances ΠΡΠ³ΡΡΠ·ΠΊΠ° Π΅ΡΡΡ'); return DataSnapShot; } }) .then((DataSnapShot)=>{ DataSnapShot.forEach((snapshot)=>{ // ΡΠΈΠΊΠ» ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ. Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² Map BalancesMap.set(snapshot.key, snapshot.val()); console.log('snap key: ', snapshot.key, ' value:', snapshot.val()); }); console.log('ReadValueBalances ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ ΡΠΈΠΊΠ»'); return BalancesMap; }); } function UpdateValueMapBalances(BalanceMap_input, Date1, Date2, Delta1, Delta2){ var BalanceMap_output = new Map; const Date_1 = new Date(Date1); const Date_2 = new Date(Date2); console.log('UpdateValueMapBalances Date_1: ', Date_1, ' Date_2: ', Date_2); if (BalanceMap_input.size === 0) { console.log('UpdateValueMapBalances Π²Ρ
.ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΏΡΡΡΠ°Ρ'); var Date_item = new Date(Date_1); console.log('UpdateValueMapBalances Date_item: ', Date_item); Date_item.setDate(1); Date_item.setMonth(Date_item.getMonth()+1); BalanceMap_output.set(Date_item.getMilliseconds(), Delta1); console.log('UpdateValueMapBalances BalanceMap_output: ', BalanceMap_output); return BalanceMap_output; } BalanceMap_input.forEach((ValueItem, KeyItem, MapItem)=>{ console.log('ValueItem: ', ValueItem, ' KeyItem: ', KeyItem); if (KeyItem <= Date1) { // Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π² Π²ΡΠ³ΡΡΠ·ΠΊΠ΅ ΡΠΎΠ»ΡΠΊΠΎ 1 Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π΄ΠΎ Π΄Π°ΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ) console.log('UpdateValueMapBalances ΠΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ²Π΅ΡΡ
Ρ'); var bool_stop = false; var Date_item = new Date(KeyItem); Date_item.setDate(1); // Π½Π° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ console.log('Date_item ', Date_item); while (!bool_stop) { Date_item.setMonth(Date_item.getMonth()+1); if ((Date_item-Date_1) <= 0) { BalanceMap_output.set(Date_item.getMilliseconds, ValueItem); } else { BalanceMap_output.set(Date_item.getMilliseconds, ValueItem + Delta1); // Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ delta 1= -Value bool_stop = true; } } console.log('UpdateValueMapBalances ΠΠΎΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ²Π΅ΡΡ
Ρ'); return BalanceMap_output; //TODO: Π²ΡΠΉΡΠΈ ΠΈΠ· ΡΠΈΠΊΠ»Π° } else { console.log('UpdateValueMapBalances ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ½ΠΈΠ·Ρ'); if (KeyItem <= Date2) { // Ρ.Π΅. ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ Date_first Π΄ΠΎ Date_last. Π‘ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π΄Π°ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ BalanceMap_output.set(KeyItem, ValueItem + Delta1); } else { // Ρ.Π΅. ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ Date_last BalanceMap_output.set(KeyItem, ValueItem + Delta1 + Delta2); // Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π½ΠΎΠ²ΡΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ/ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ Delta2=0, Π° Delta1= -Value } console.log('UpdateValueMapBalances ΠΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ½ΠΈΠ·Ρ'); } }) return BalanceMap_output; } Logs:
2:23:26.362 PM outlined_flag UpdateBalancesUser Function execution took 1699 ms, finished with status: 'ok' 2:23:26.356 PM info UpdateBalancesUser ΠΠ°ΠΏΠΈΡΠ°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Map { '1522540800000' => 200000 } 2:23:26.353 PM info UpdateBalancesUser ReadValueBalances ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ ΡΠΈΠΊΠ» 2:23:26.353 PM info UpdateBalancesUser snap key: 1522540800000 value: 200000 2:23:26.353 PM info UpdateBalancesUser ReadValueBalances ΠΡΠ³ΡΡΠ·ΠΊΠ° Π΅ΡΡΡ 2:23:26.352 PM info UpdateBalancesUser ReadValueBalances ΠΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΡ ΠΎΡ 1519862400000 2:23:25.861 PM info UpdateBalancesUser UpdateValueMapBalances BalanceMap_output: Map { [Function: getMilliseconds] => -400000 } 2:23:25.860 PM info UpdateBalancesUser UpdateValueMapBalances Date_item: 2018-03-01T00:00:00.000Z 2:23:25.860 PM info UpdateBalancesUser UpdateValueMapBalances Π²Ρ
.ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΏΡΡΡΠ°Ρ 2:23:25.860 PM info UpdateBalancesUser UpdateValueMapBalances Date_1: 2018-03-01T00:00:00.000Z Date_2: 2018-03-01T00:00:00.000Z 2:23:25.849 PM info UpdateBalancesUser TypeofChange: 0 2:23:25.849 PM info UpdateBalancesUser Date_first: 1519862400000 . Value_first: -400000