What is the best way to organize a batch write operation that involves multiple functions and utilizes various databases such as Firestore, Auth, and Real

I am facing a challenge with my Firebase Function, as it needs to update various collections that are all interrelated. I want to ensure that these updates occur in a batch write to maintain consistency - all or nothing. However, the updates are performed by different functions separately:

await update1(data) // update to firestore 
await update2(data) // update to firestore and realtime
await update3(data) // update to firestore and auth

I am considering passing a reference to the batchWrite into each function and then executing batch.commit() at the end of all updates. While this approach seems feasible for Firestore writes, I am uncertain how to handle updates within the Auth and Realtime Database. One idea is to return a callback function that handles the Auth and Realtime updates upon a successful batch.commit, but what if those operations fail...

How can I structure a multi-function batch write across different databases (Firestore, Auth, Realtime) while ensuring atomicity?

Thank you for your insights.

Answer №1

When addressing your initial inquiry

Could I potentially pass a reference to the batchWrite function into each individual function?

Absolutely, you have the ability to pass the batch instance to multiple functions. Just remember to execute batch.commit() at the conclusion for everything to function as anticipated.

Now onto your second query

How would one go about structuring a multi-function batch write with varying databases (Firestore, Auth, Realtime)?

Presently, there is no method available to perform a batch write across multiple Firebase products (such as RTDB, Firestore, etc).

To lessen the likelihood of encountering issues, it's recommended that you carry out your operations within a reliable environment such as cloud functions, which boast minimal downtime. In most scenarios, if a cloud function fails midway through, it tends to be due to insufficient validation or error handling procedures.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Retrieve the data from an HTTP Request using AngularJS

I've been working on creating a JavaScript function that sends an HTTP Request to retrieve data, but I'm struggling with how to handle and use the result in another function. Here are the two functions I've tried (both intended to achieve t ...

Updated Multer version causing issues with uploading image files

After using multer middleware to upload an image, I encountered an issue where the file image was showing up as undefined. This meant that I couldn't retrieve the name or file extension of the uploaded file. I'm not sure if this is an error with ...

Tips for refreshing Trackball controls in three.js

In my three.js project, I am faced with the challenge of updating the trackball controls upon window resize. I have found that updating the entire controls by calling the function with new input variables is necessary. Unfortunately, recreating the contr ...

Take out property that was placed in the "style" tag

One particular static HTML file that I have consists of the following code: <style> p { overflow-wrap: break-word; word-break: break-word; hyphens: auto; } </style> <div id="wrapper"> <p>Insert text here ...

An error has occurred with the Firefox Addon: the module `path` cannot be located within the resource://gre/modules/commonjs/http.js

Currently developing a Firefox add-on on Windows10 with node v5.8.0 and npm v3.5.3, using Firefox v.45.0 The issue arises from the following line of code: var path = require("path"); The error message reads: Message: Module `http` is not found at resou ...

Is it redundant to use flatMap in RXJS?

I recently came across an enlightening article on RXJS which delves into the concept of flatMap. After understanding its purpose - to flatten observable of observables into a single observable sequence (similar to SelectMany in C#) - I noticed an interes ...

Issue with C# MVC JS functionality not functioning properly within Partial view following ajax validation

In my layout, I include my script code from the view. @if (IsSectionDefined("VSscript")) { @RenderSection("VSscript"); } Within the view, I define the script section @section VSscript { and set up an Ajax form that connects to a partial v ...

Encountering a 405 Error while attempting to perform a search on Twitter

I have been attempting to search Twitter using jQuery, but I am encountering an issue. The response only shows: https://api.twitter.com/1.1/search/tweets.json?q=django 405 (Method Not Allowed) XMLHttpRequest cannot load https://api.twitter.com/1.1/search/ ...

Continuously execute the scroll function as long as the cursor remains over the element

Is there a method to continuously execute a function while the cursor hovers over a specific DOM element? I need to trigger a scroll action whenever the user hovers over an arrow, with an optional timeout feature. This requirement must be met without utili ...

Transform your Angular Framework Application into a desktop application with the power of Electron

Project Description: I currently have a fully functional front-end angularjs application that is connected to a back-end Java application deployed on Tomcat, running on a different port (8443). Up until now, I have been accessing the application through a ...

What are the methods to alter validation for a Formfield based on the input from other Formfields?

My aim is to create a Form where input fields are required only if one or more of them are filled out. If none of the fields have been filled, then no field should be mandatory. I came across a suggestion on a website that recommended using "valueChanges" ...

Exploring User Authentication and Permissions in React and Node.js?

Currently working on a new application that utilizes the complete MERN stack, and I find myself at a crossroads when it comes to implementing protected routes, user authentication, and assigning ACL user roles. In past projects using Node.js, I've re ...

Deactivate a button within a label container with the help of Javascript

Is there a way to deactivate an 'inner-button' located within a label tag? The button in question is constructed within a label: <label for="UploadFile" class="inner-button" data-toggle="tooltip" data-placement="top" title="Upload File" oncl ...

Embed custom choices within directive using a 'select' element

I am facing a challenge with a directive that involves a select element populated with options loaded and cached through ajax. The issue arises when I need to display specific options based on the context in which this directive is used. My initial idea w ...

Why does ASP.NET sometimes set my JavaScript object to null?

There is a <script> in my code that includes the following line: var tbl = document.getElementById("<%= this.tblSelection.ClientID %>"); Despite this, when the script runs, tbl always ends up being set to null. The table has been defined lik ...

Manipulate the DOM to remove a checkbox using JavaScript

I'm brand new to exploring the world of Javascript and could use some guidance with this task. I have a collection of checkboxes that I'd like to manipulate so that when one is checked, it disappears from the list automatically. I've come ac ...

Simple Javascript does not appear well on the screen (Mean stack)

I am facing a seemingly simple issue with my code, but for some reason it is not working as expected. I am trying to create a basic website using Mean Stack for personal development purposes. The code I have written is similar to examples in AngularJS docu ...

Error: The `Field` component encountered a failed prop type validation due to an invalid prop `component` after upgrading to MUI version

Encountered an error when migrating to Material ui v4 Failed prop type: Invalid prop component supplied to Field. in Field (created by TextField) This error points to the redux form field component export const TextField = props => ( <Field ...

What is the best approach to including files in addition to other data fields when calling a webmethod in asp.net using a jquery ajax request?

My webform contains a variable number of textboxes and dropdowns. To send data to the server-side webmethod, I am utilizing the following code: $.ajax({ type: "POST", url: "SupplierMaster.aspx/RegisterSupplier", data: JSON.stringify({ ...

How can you determine the status of an individual checkbox within a reactjs (material-table) component?

In my project, I have implemented a table that displays a list of students retrieved from a database. Upon clicking on each student row, a modal popup appears showing another table with 4 rows and 3 columns. Each column in the modal contains 4 checkboxes. ...