Javascript Firebase云功能超时
使用shell测试时,以下函数运行良好,数据在firestore中创建。 当推入prod时,它返回Javascript Firebase云功能超时,javascript,firebase,google-cloud-functions,google-cloud-firestore,Javascript,Firebase,Google Cloud Functions,Google Cloud Firestore,使用shell测试时,以下函数运行良好,数据在firestore中创建。 当推入prod时,它返回函数执行耗时60002毫秒,状态为“超时” 有什么意见吗 exports.synchronizeAzavista = functions.auth.user().onCreate(event => { console.log('New User Created'); const user = event.data; const email = user.email;
函数执行耗时60002毫秒,状态为“超时”
有什么意见吗
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"));
});
});
编辑
我已经用以下内容更新了我的代码,但我仍然得到函数返回未定义、预期的承诺或值
,但我无法确定函数返回未定义的位置。为什么我的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;
}
你没有回复你写给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
});
});
});
你没有回复你写给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
});
});
});
谢谢@Frank,这是否意味着then()终止集合()的承诺?不-问题不在于“then”-您可以包含一个then部分,但您需要返回承诺,因此Firebase知道它必须让您的函数保持活动状态,直到该承诺解决。-然后firebase可以将承诺的结果解释为成功或错误(拒绝承诺)谢谢@Frank,这是否意味着then()终止了集合的承诺()?不-问题不在于“then”-您可以包含then部分,但您需要返回承诺,所以Firebase知道它必须让你的功能保持活跃,直到承诺解决为止。-然后firebase可以将承诺的结果解释为成功或错误(拒绝承诺)