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 

    0