[英]Firebase Cloud Functions - connection-error
每當我調用我的雲 function 時,我得到Function execution took 5910 ms, finished with status: 'connection error'
。 我相信這與承諾和返回或.d.exists
,但我無法進一步縮小范圍。
Function:
exports.useInvite = functions.https.onCall((data, context) => {
if (context.auth) {
throw new functions.https.HttpsError('failed-precondition', "cannot be authenticated");
}
if (!data.code) {
throw new functions.https.HttpsError('failed-precondition', "must provide an invite code");
}
console.log("Code: ", data.code);
return admin.firestore().collection("invites").doc(data.code).get().then(d => {
console.log("Exists: ", d.exists);
if (!d.exists) {
throw new functions.https.HttpsError('failed-precondition', "invalid invite code");
}
const added = new Date(d.data().created.seconds * 1000);
const week = 60 * 60 * 24 * 7 * 1000;
if ((new Date() - added) < week) {
return admin.firestore().collection("invites").doc(data.code).update({
validated: true
}).then(() => {
return null
}).catch(() => {
throw new functions.https.HttpsError('failed-precondition', "invalid invite code");
});
} else {
console.log("Expired!");
throw new functions.https.HttpsError('failed-precondition', "invite code expired");
}
}).catch(e => {
console.log(e);
throw new functions.https.HttpsError('failed-precondition', "invalid invite code");
});
});
以下更改應該可以解決問題:
exports.useInvite = functions.https.onCall((data, context) => {
class ExpiredCodeError extends Error {
constructor(message) {
super(message);
this.message = message;
this.type = 'ExpiredCodeError';
}
}
class InvalidCodeError extends Error {
constructor(message) {
super(message);
this.message = message;
this.type = 'InvalidCodeError';
}
}
if (context.auth) {
throw new functions.https.HttpsError('failed-precondition', "cannot be authenticated");
}
if (!data.code) {
throw new functions.https.HttpsError('failed-precondition', "must provide an invite code");
}
console.log("Code: ", data.code);
return admin.firestore().collection("invites").doc(data.code).get()
.then(d => {
console.log("Exists: ", d.exists);
if (!d.exists) {
throw new InvalidCodeError("invalid invite code");
}
const added = new Date(d.data().created.seconds * 1000);
const week = 60 * 60 * 24 * 7 * 1000;
if ((new Date() - added) < week) {
return admin.firestore().collection("invites").doc(data.code).update({
validated: true
})
} else {
console.log("Expired!");
throw new ExpiredCodeError("invite code expired");
}
})
.then(() => {
return { status: "OK" }
})
.catch(e => {
console.log(e);
if (e.type === 'ExpiredCodeError') {
throw new functions.https.HttpsError('precondition', e.message);
} else if (e.type === 'InvalidCodeError') {
//May be merged with the above clause...
throw new functions.https.HttpsError('precondition', e.message);
} else {
throw new functions.https.HttpsError('internal', e.message);
}
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.