Having trouble with inserting data into Firestore using Firebase cloud functions?

I'm attempting to insert a document from a Firebase cloud function into Firestore, but it's not functioning as expected. Here's my code snippet:

import * as admin from "firebase-admin"
import * as functions from "firebase-functions"

admin.initializeApp()

exports.findDeck = functions.https.onCall((data: { deckId: string }) => {
    admin.firestore().collection("messages").add({original: "for me"})
    return requestDeck.findDeck(data.deckId)
})

It appears to be a straightforward task. I am referencing an example from:

https://github.com/firebase/functions-samples/blob/master/quickstarts/uppercase-firestore/functions/index.js

I have also consulted the Firestore documentation for Node.js and attempted using set instead of add. However, these changes do not produce any results or errors.

Answer №1

When adding a document to Cloud Firestore, it's important to remember that it is an asynchronous operation. If the function is terminated before the document is successfully added, it may lead to issues.

To ensure that Cloud Functions knows when your code has completed, make sure to properly chain all promises from asynchronous operations like this:

exports.findDeck = functions.https.onCall((data: { deckId: string }) => {
    return admin.firestore().collection("messages").add({original: "for me"})
      .then(() => {
        return requestDeck.findDeck(data.deckId)
      });
})

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

Encountering a problem with the 'string' parameter when using TypeScript

I keep encountering the following error message: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ barkingRoadProject: string[]; }'. No index signature with a paramet ...

Creating a React Typescript interface with nested interfaces for props

My issue is with a functional component that is supposed to receive props from another functional component. The problem lies in the fact that an interface within the receiving component always returns 'undefined' when I log it in the console. De ...

Having trouble locating a nested component through multiple ng-content in Angular 8?

Currently, I am encountering an issue while attempting to locate components nested within sub child components. To illustrate what I am aiming for, here is an example: import { Component, OnInit, ContentChildren, ElementRef, QueryList } from '@angul ...

When two-dimensional arrays meet destructuring, it results in a type error

Can anyone clarify TypeScript behavior in this scenario? JavaScript const test1 = [ ['a', 'b'], ['c', 'd'], ]; const test2 = [ ...[ ['a', 'b'], ['c', ' ...

error TS2339: The attribute 'properties' is not accessible on the class 'TestPage'

Utilizing a typescript abstract class as the base class of my layout component in React has been essential for my project. The implementation of this base class looks something like this: import { IPageLayoutActions, IPageLayoutLocalState, IPageLayoutProp ...

Why does Firestore interpret a single document read as multiple document reads when using Next.js 13?

When using Next.js 13 to fetch for 3 docs on my page, Firebase is unexpectedly counting it as 10 document reads. Even when redirecting to a detail page where only a single doc is fetched, Firebase counts it as 4 reads. I have checked my code and confirmed ...

Tips for utilizing the @Component decorator in both abstract classes and their implementations within Angular 8

While working with Angular 8, I am attempting to utilize abstract components. My goal is to define the templateUrl and styleUrls in my abstract class, but have the selector name specified in the implemented class. Here is an example: @Component({ // sel ...

Using TypeScript gives you the ability to specify the type of an object while destructuring it,

Currently in the process of refactoring a NodeJS application to TypeScript. I have been consistently using object destructuring and have also been creating aliases while object destructuring, as shown in the code block below. My question is, how can I sp ...

Loop through a collection of elements of a certain kind and selectively transfer only certain items to a different collection of a different kind

When working with typescript, I am faced with the challenge of dealing with two arrays: interface IFirst{ name: string; age: number } interface ISecond { nickName: string; lastName: string; } myFirstArray: IFirst[]; mySecondArray: ISe ...

Creating sophisticated TypeScript AngularJS directive

Recently, I came across a directive for selecting objects from checkboxes which can be found at this link: The issue I'm facing is that we are using TypeScript and I am unsure of how to implement the directive in TypeScript. From what I understand, ...

Typescript encounters difficulty locating the Express module

My venture into creating my debut NodeJS application has hit a roadblock. Following advice from multiple blogs, I have been attempting to build my first nodejs app in typescript by following the steps below: npm install -g express-generator npm install - ...

Leverage context to facilitate communication between components operating at various levels of the system

I am currently working on the settings pages of my applications. Each page features a common SettingsLayout (parent component) that is displayed across all settings pages. One unique aspect of this layout is the presence of an ActionsBar, where the submit/ ...

What is the best way to distinguish shared services from other services in Angular 6 and above?

There was a time when I frequently heard the term "shared services" in relation to sharing data between unrelated components in Angular. However, I started questioning whether every service is actually classified as a shared service or not. If it is cons ...

Using multiple where conditions in TypeORM

SELECT * FROM clients WHERE preferred_site = 'techonthenet.com' AND client_id > 6000; Is there a way to execute this in the typeorm query builder? ...

Unexpected behavior with onKeyPress in React-Native Windows resulting in missing key press events

Currently, I am working on a Windows app using react-native version 0.54.0. For one of the functionalities, I have incorporated a TextInput element and would like to use onKeyPress. Here is my code snippet: <TextInput ref = { this.setTextInputRef } on ...

Dealing with TypeScript errors TS2082 and TS2087 when trying to assign an Away3D canvas to a variable

As a beginner with TypeScript, I am in the process of creating an Away3D scene where a canvas element is dynamically generated and needs to be appended to a container. Although the code functions correctly, I am encountering the following compilation erro ...

Combine the names of classes in an array into a union type

Can someone help me with extracting all the methods from an Array of Classes into one type Union? Here's an example: class A{ getBooks(): Book[]{} getBook(): Book{} } class B{ getUsers(): User[]{} getUser(): User{} getBooksOfUser(userId: s ...

The Influence of Getter Performance in Angular Templates

As I delve into an existing Angular application, I've noticed a pattern where values used in templates across many components are actually properties that are being accessed through getters and setters without any additional logic: <input type="nu ...

Problems with importing modules in Apollo Server

I've encountered a never-ending stream of error messages post importing Apollo Server into my Typescript-based Node.js application. (Check out the screenshot below) It appears that Apollo is unable to locate anything in the graphql dependency. Could ...

The 3-way data binding in angularFire does not update a function

My issue involves a firebaseObject (MyFirebaseService.getCurrentUser()) being bound to $scope.user. Once successfully bound, I iterate through the object to check if it contains an "associatedCourseId" equal to a specific value ($stateParams.id). If it doe ...