我正在創建一個android應用程序,記錄某人在某些事情上花了多長時間。我想增加花費在總時間上的時間,所以我知道一個用戶在一個練習類型上花費了多長時間。我想在一個函數中完成它,因爲我認爲它比交易更容易。Firebase函數 - 爲舊值添加新值
現在,我知道這個函數會循環直到firebase關閉它。
但我該怎麼做?有沒有更簡單的方法來做到這一點?
我正在創建一個android應用程序,記錄某人在某些事情上花了多長時間。我想增加花費在總時間上的時間,所以我知道一個用戶在一個練習類型上花費了多長時間。我想在一個函數中完成它,因爲我認爲它比交易更容易。Firebase函數 - 爲舊值添加新值
現在,我知道這個函數會循環直到firebase關閉它。
但我該怎麼做?有沒有更簡單的方法來做到這一點?
你有一個簡單的選項來添加一個標誌,指示你更新了數據。下一次你將進入該函數,只需檢查標誌是否存在,如果是,退出函數。這個con的這個是你至少會運行n + 1的另一個選項,根據他們的最新帖子,你也知道有一個「onUpdate」和「onCreate」觸發器。你可以巧妙地使用它們來優化它(例如:只在第一次創建時執行XYZ,所以它不會在每次更新時運行)。
https://firebase.googleblog.com/2017/07/cloud-functions-realtime-database.html
就像你說的,onWrite會捕捉每一個寫事件。我的解決方案將用onCreate取代onWrite,但是讓用戶寫入另一條路徑是因爲Firebase將繼續觸發該功能。除此之外,你的方法不是最好的解決方案,因爲更新可能會發生衝突。交易的使用更好。這看起來像這樣:
exports.addExerciseTime = functions.database.ref('users/{userid}/stats/exerciseTime/{type}').onCreate(event =>{
console.log("Exercise time updates...");
var newdata = event.data.val();
const pathToValue = //create the path here to exercisetime
return pathToValue.transaction(function(exercisetime) {
return (exercisetime || 0) + newdata;
});
});
*注意onCreate事件,而不是onWrite。再次說明:您需要將其寫入其他路徑。