0

以下の関数は、シェルでテストしたときにうまく動作し、ファイアウォールにデータが作成されます。 prodにプッシュすると、Function execution took 60002 ms, finished with status: 'timeout'が返されます。Firebase Cloud関数のタイムアウト

入力がありますか?

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")); 
     }); 
}); 

編集

私は次のように自分のコードを更新しましたが、私はまだFunction returned undefined, expected Promise or valueを取得しますが、私の関数の戻り値は未定義どこで識別することはできません。なぜ私のgetUser()関数は何も返しません?

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; 
} 

答えて

2

あなたは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 
      }); 
     }); 
}); 
+0

ありがとう@Frank、それは、then()がset()の約束を殺すことを意味しますか? – Benoit

関連する問題