Я развернул облачную функцию HTTP для firebase. Однако после развертывания самый первый вызов возвращает код ошибки тайм-аута. Я использую библиотеку залпа для Android, чтобы вызвать функцию HTTP. Последующие вызовы, кажется, работают отлично.
Что я сделал: я почувствовал проблему, возможно, проблему времени холодного запуска, однако я попытался увеличить продолжительность тайм-аута с кода до 180 сек. Тем не менее, я все еще получаю ту же проблему
Код: показывает полную функцию облака с проблемой
const runtimeOptsActivateApp = {
timeoutSeconds: 180,
memory: '128MB'
}
exports.activateApp = functions.runWith(runtimeOptsActivateApp).https.onRequest((req, res) => {
const pin = req.query.pin;
const id_token = req.query.auth;
let docId;
let uid;
let email;
// idToken comes from the client app
admin.auth().verifyIdToken(id_token)
.then(decodedToken => {
uid = decodedToken.uid;
email = decodedToken.email;
return activationPinsRef
.where("pin", "==", pin)
.get()
})
.then(querySnapshot=>{
if(querySnapshot.empty){
return Promise.reject(new Error("Activation pin does not exist..."))
}
return activationPinsRef
.where("pin", "==", pin)
.where("is_blocked", "==", false)
.get()
})
.then(querySnapshot=>{
if(querySnapshot.empty){
return Promise.reject(new Error("User has been blocked..."))
}
return activationPinsRef
.where("pin", "==", pin)
.where("is_blocked", "==", false)
.where("has_activated", "==", false)
.get()
})
.then(querySnapshot=>{
if(querySnapshot.empty){
console.log("User has activated, He may be trying to reactivate, verify his activation status in users document!")
return usersRef
.doc(uid)
.get()
}
console.log("User is a trying to activate for the first time!")
querySnapshot.forEach(documentSnapshot => {
docId = documentSnapshot.id;
})
return activationPinsRef
.doc(docId)
.update({
"has_activated": true,
"uid_activated": uid,
"time_activated": Date.now()
})
})
.then(result => {
if(result instanceof admin.firestore.DocumentSnapshot){
var is_activated = result.data().is_activated;
if(is_activated){
console.log('Reactivation successful!!!');
return res.status(200).send({
"status": "success",
"is_reactivation": true
})
}
return Promise.reject(new Error("User is_activated field is false!"))
}
usersRef
.doc(uid)
.update({
is_activated:true
})
return res.status(200).send({
"status": "success",
"is_reactivation": false
})
})
.catch(error => {
console.log(error)
return res.status(401).end()
})
});