Partage
  • Partager sur Facebook
  • Partager sur Twitter

async await mais toujours un probleme

une écriture en DB aléatoire

    29 mai 2024 à 14:57:41

    Bonjour,

    j'ai un problème tenace de code qui semble s'executer PARFOIS dans le mauvais ordre malgré une utilisation massive de l'async/await

    const createSubscription = async(req, res, next) => {
    
      try{
    
        const userToken = req.header('Authorization')
        const userId = await userService.verifyUserToken(req, userToken)
        await userService.verifyAdmin(req, userId)
        await stripeService.initStripe(req)
    
        //ajax call stripe service
        const product = await stripeService.createProduct({data : req.body})
    //ajax call stripe service const allPriceForProduct = await setAllPriceProduct(product, req)
    //format data
        let dataBody = await setDataBody(product, allPriceForProduct, req.body)
        // console.log here est toujours correctement écris, avec la data souhaité
        console.log(dataBody)
    
    
        //Get and set collection subscription
        const subscriptionDB = await subscriptionService.getRefAndDataSubscription(req);
        await subscriptionDB.data.options.push(dataBody)
        
    
        await subscriptionService.updateSubscriptionRef(req, subscriptionDB.ref, subscriptionDB.data )
    
    
        const subscriptionData = await subscriptionService.getRefAndDataSubscription(req);
    
    
        res.json(subscriptionData.data.options)
    
      }catch (e){
        console.error('stripe_error_create_offer', e.message)
        //send mail admin + log admin ????
        res.status(500)
      }
    
      next()
    
    }


    C'est un comportement de dingue...  mon console.log(dataBody) me retourne toujours ce que je souhaite écrire en DB
    Je n'ai donc aucun probleme d'ajax coté stripe ou même de formatage de la donnée
    Ensuite je push ce dataBody dans un object issu d'une collection firestore :

        await subscriptionDB.data.options.push(dataBody)

    Là aussi , si je console.log(subscriptionDB.data) à ce moment...tout est OK, j'ai le payload souhaité pour mon écriture finale

    Mais là juste après quand je set ce payload

        await subscriptionService.updateSubscriptionRef(req, subscriptionDB.ref, subscriptionDB.data )

    C'est la survenance du problème aleatoire...  le payload est très souvent set sans la mise à jour du payload (. comme si tout le process stripe + formatage + hydratation du payload n'avait pas été encore éété exécuté . ALORS QUE mes console.log m'indiquent le contraire

    Le problème est plus fréquent sur une env de prod qu'en local.

    Est ce que je montre sur le async/await dans mon code ?? chaque ligne n'est elle pas censé attendre la fin de la précédente avant d'être exécuté ?

    Help !!!! je vais m'arracher des cheveux que je n'ai pas !!!

    • Partager sur Facebook
    • Partager sur Twitter
    Passe en résolu si c'est le cas, merci !
      4 juin 2024 à 19:36:11

      Bonjour 

      en production les opérations peuvent prendre plus de temps qu'en local donc plus de chance de voir les répercutions des actions actions asynchrones mais avec un code comme ça compliqué de voir un soucis quelque part avec des await sur chaque ligne des fonctions qu'on voit ici sont censés attendre les précédentes oui, les données renvoyées par tes promesses sont peut être incorrectes en production ou une erreur en production arrive lors de l'une de ses étapes.

      • Partager sur Facebook
      • Partager sur Twitter

      Konjiki Ashisogi Jizo

      async await mais toujours un probleme

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown