7

I'm currently testing out the new firestore but I always get the same problem that it tells me something about Deadline exceeded

{ Error: Deadline Exceeded
    at /user_code/node_modules/firebase-admin/node_modules/grpc/src/node/src/client.js:554:15
  code: 16,
  metadata: Metadata { _internal_repr: {} },
  note: 'Exception occurred in retry method that was not classified as transient' }

This is my current code which seems fine (and works when I deploy it to Firebase)

const functions = require('firebase-functions');

const admin = require('firebase-admin');
var serviceAccount = require("./xxxxxxxx-firebase-adminsdk.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://xxxxxxxxx-xxxx.firebaseio.com"
});

exports.registerUser = functions.auth.user().onCreate(event => {
  admin.firestore().collection('users').doc(event.data.uid).set({
    name: 'Test User',
    country: 'USA'
  }).catch(error => {
    console.log(error);
  })
});

It also shows this message Function returned undefined, expected Promise or value

Incinerator
  • 2,589
  • 3
  • 23
  • 30
Konrad
  • 157
  • 1
  • 3
  • 10

1 Answers1

14

With Cloud Functions triggers, you need to return a promise that becomes resolved when the work is complete. The set() method on the document return a promise, so you should return it to let Cloud Functions know when it's safe to clean up the function:

exports.registerUser = functions.auth.user().onCreate(event => {
  return admin.firestore().collection('users').doc(event.data.uid).set(...)
});
Doug Stevenson
  • 297,357
  • 32
  • 422
  • 441
  • @JeromeGoldstein Why don't you ask this as a separate question since it's not directly related to the problem here? – Doug Stevenson Nov 12 '17 at 17:26
  • 2
    I seem to run into this while using an `async` function as the `onRun` param of the Firebase function. If `async` functions always return a promise, could you perhaps shed some light as to why this error still happening? – Matias Aug 02 '20 at 06:38