Первый запуск облачной функции Firebase после тайм-аута развертывания - PullRequest
0 голосов
/ 01 февраля 2020

Я развернул облачную функцию 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()
  })

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...