Benoit
Benoit

Reputation: 472

Firebase Cloud functions timeout

The following function works well when tested with shell, and data are created in firestore. When pushed in prod, it returns Function execution took 60002 ms, finished with status: 'timeout'

Any input?

exports.synchronizeAzavista = functions.auth.user().onCreate(event => {

    console.log('New User Created');

    const user = event.data;
    const email = user.email;
    const uid = user.uid;

    return admin.database().ref(`/delegates`)
        .orderByChild(`email`)
        .equalTo(email)
        .once("child_added").then(snap => {
            const fbUserRef = snap.key;

            return admin.firestore().collection(`/users`).doc(`${fbUserRef}`).set({
                email: email,
                uid: uid
            }).then(() => console.log("User Created"));
        });
});

Edit

I've update my code with the following, but I still getting Function returned undefined, expected Promise or value but I can't identify where my function return undefined. Why my getUser() function does not return anything?

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

admin.initializeApp(functions.config().firebase);

exports.synchronizeAzavista = functions.auth.user().onCreate(event => {

    console.log('New User Created');//This log

    const user = event.data;
    const email = user.email;
    const uid = user.uid;

    console.log('Const are set');//This log

    getUser(email).then(snap => {

        console.log("User Key is " + snap.key);//No log

        const fbUserRef = snap.key;

        return admin.firestore().collection(`/users`).doc(`${fbUserRef}`).set({
            email: email,
            uid: uid
        });
    }).then(() => console.log("User Data transferred in Firestore"));
});

function getUser(email) {

    console.log("Start GetUser for " + email);//This log 

    const snapKey = admin.database().ref(`/delegates`).orderByChild(`email`).equalTo(email).once("child_added").then(snap => {
        console.log(snap.key);//No Log here
return snap;
    });
    return snapKey;
}

Upvotes: 1

Views: 3921

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 598668

You're not returning a promise from your write to Firestore.

exports.synchronizeAzavista = functions.auth.user().onCreate(event => {
    const user = event.data;
    const email = user.email;
    const uid = user.uid;

    return admin.database().ref(`/delegates`)
        .orderByChild(`email`)
        .equalTo(email)
        .once("child_added").then(snap => {
            const fbUserRef = snap.key;

            return admin.firestore().collection(`/users`).doc(`${fbUserRef}`).set({
                email: email,
                uid: uid
            });
        });
});

Upvotes: 4

Related Questions