Firebase Stripe (Error) Promises must be handled appropriately












0















I am trying to process my payment with firebase and stripe and have come across a problem when trying to deploy my function to the cloud saying 'Promises must be handled appropriately. I know this is a tlint compilation error but can't figure out why the error is being triggered.



Here is my code



import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp(functions.config().firebase);

const stripe = require('stripe')(functions.config().stripe.testkey);

exports.stripeCharge = functions.firestore
.document('/payments/{userId}/mypayments/{paymentId}')
.onCreate((snap,event) => {
const payment = snap.data()
const userId = event.params.userId
const paymentId = event.params.paymentId

// checks if payment exists or if it has already been charged
if (!payment || payment.charge) return null;

return admin.firestore()
.doc(`/users/${userId}`)
.get()
.then(snapshot => {
return snapshot
})
.then(customer => {
const amount = payment.price * 100 // amount must be in cents
const idempotency_key = paymentId // prevent duplicate charges
const source = payment.token.id
const currency = 'usd'
const charge = {amount, currency, source}

return stripe.charges.create(charge, { idempotency_key })
})
.then((charge) => {
admin.firestore()//The error keeps referring me to this line
.collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
.set({
charge: charge
}, { merge: true })
})
})


The line generating the error is stated above










share|improve this question





























    0















    I am trying to process my payment with firebase and stripe and have come across a problem when trying to deploy my function to the cloud saying 'Promises must be handled appropriately. I know this is a tlint compilation error but can't figure out why the error is being triggered.



    Here is my code



    import * as functions from 'firebase-functions';
    import * as admin from 'firebase-admin';

    admin.initializeApp(functions.config().firebase);

    const stripe = require('stripe')(functions.config().stripe.testkey);

    exports.stripeCharge = functions.firestore
    .document('/payments/{userId}/mypayments/{paymentId}')
    .onCreate((snap,event) => {
    const payment = snap.data()
    const userId = event.params.userId
    const paymentId = event.params.paymentId

    // checks if payment exists or if it has already been charged
    if (!payment || payment.charge) return null;

    return admin.firestore()
    .doc(`/users/${userId}`)
    .get()
    .then(snapshot => {
    return snapshot
    })
    .then(customer => {
    const amount = payment.price * 100 // amount must be in cents
    const idempotency_key = paymentId // prevent duplicate charges
    const source = payment.token.id
    const currency = 'usd'
    const charge = {amount, currency, source}

    return stripe.charges.create(charge, { idempotency_key })
    })
    .then((charge) => {
    admin.firestore()//The error keeps referring me to this line
    .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
    .set({
    charge: charge
    }, { merge: true })
    })
    })


    The line generating the error is stated above










    share|improve this question



























      0












      0








      0








      I am trying to process my payment with firebase and stripe and have come across a problem when trying to deploy my function to the cloud saying 'Promises must be handled appropriately. I know this is a tlint compilation error but can't figure out why the error is being triggered.



      Here is my code



      import * as functions from 'firebase-functions';
      import * as admin from 'firebase-admin';

      admin.initializeApp(functions.config().firebase);

      const stripe = require('stripe')(functions.config().stripe.testkey);

      exports.stripeCharge = functions.firestore
      .document('/payments/{userId}/mypayments/{paymentId}')
      .onCreate((snap,event) => {
      const payment = snap.data()
      const userId = event.params.userId
      const paymentId = event.params.paymentId

      // checks if payment exists or if it has already been charged
      if (!payment || payment.charge) return null;

      return admin.firestore()
      .doc(`/users/${userId}`)
      .get()
      .then(snapshot => {
      return snapshot
      })
      .then(customer => {
      const amount = payment.price * 100 // amount must be in cents
      const idempotency_key = paymentId // prevent duplicate charges
      const source = payment.token.id
      const currency = 'usd'
      const charge = {amount, currency, source}

      return stripe.charges.create(charge, { idempotency_key })
      })
      .then((charge) => {
      admin.firestore()//The error keeps referring me to this line
      .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
      .set({
      charge: charge
      }, { merge: true })
      })
      })


      The line generating the error is stated above










      share|improve this question
















      I am trying to process my payment with firebase and stripe and have come across a problem when trying to deploy my function to the cloud saying 'Promises must be handled appropriately. I know this is a tlint compilation error but can't figure out why the error is being triggered.



      Here is my code



      import * as functions from 'firebase-functions';
      import * as admin from 'firebase-admin';

      admin.initializeApp(functions.config().firebase);

      const stripe = require('stripe')(functions.config().stripe.testkey);

      exports.stripeCharge = functions.firestore
      .document('/payments/{userId}/mypayments/{paymentId}')
      .onCreate((snap,event) => {
      const payment = snap.data()
      const userId = event.params.userId
      const paymentId = event.params.paymentId

      // checks if payment exists or if it has already been charged
      if (!payment || payment.charge) return null;

      return admin.firestore()
      .doc(`/users/${userId}`)
      .get()
      .then(snapshot => {
      return snapshot
      })
      .then(customer => {
      const amount = payment.price * 100 // amount must be in cents
      const idempotency_key = paymentId // prevent duplicate charges
      const source = payment.token.id
      const currency = 'usd'
      const charge = {amount, currency, source}

      return stripe.charges.create(charge, { idempotency_key })
      })
      .then((charge) => {
      admin.firestore()//The error keeps referring me to this line
      .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
      .set({
      charge: charge
      }, { merge: true })
      })
      })


      The line generating the error is stated above







      node.js firebase google-cloud-functions






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 24 '18 at 7:42









      marc_s

      577k12911141259




      577k12911141259










      asked Nov 23 '18 at 12:02









      user10112707user10112707

      155




      155
























          2 Answers
          2






          active

          oldest

          votes


















          1














          Actually, with the latest version(s) of Cloud Functions you are not obliged to include a catch() in your Promises chaining. The platform where the Cloud Function runs will handle the error itself.



          Based on this post What could this be about? [TsLint Error: "Promises must be handled appropriately"] it is apparently an error generated by TsLint (EsLint?).



          However, independently of this "error" detected by TsLint, I think you may encounter problems with your Cloud Function because you don't return the last promise of your chain:



          return admin.firestore()     //HERE YOU RETURN CORRECTLY
          .doc(`/users/${userId}`)
          .get()
          .then(snapshot => {
          return snapshot //HERE YOU RETURN CORRECTLY
          })
          .then(customer => {
          const amount = payment.price * 100 // amount must be in cents
          const idempotency_key = paymentId // prevent duplicate charges
          const source = payment.token.id
          const currency = 'usd'
          const charge = {amount, currency, source}

          return stripe.charges.create(charge, { idempotency_key }) //HERE YOU RETURN CORRECTLY
          })
          .then((charge) => {
          return admin.firestore() //HERE, IN YOUR CODE, YOU DON'T RETURN
          .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
          .set({
          charge: charge
          }, { merge: true })
          })
          })





          share|improve this answer

































            0














            finally figure it out
            Whenever you make a promise function, it has to end with an error handler so i fixed this by using a simple catch



            .then((charge) => {
            admin.firestore()
            .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
            .set({
            charge: charge
            }, { merge: true })
            .catch(er=>{
            console.log(er);
            return er
            }
            )
            })





            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446378%2ffirebase-stripe-error-promises-must-be-handled-appropriately%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1














              Actually, with the latest version(s) of Cloud Functions you are not obliged to include a catch() in your Promises chaining. The platform where the Cloud Function runs will handle the error itself.



              Based on this post What could this be about? [TsLint Error: "Promises must be handled appropriately"] it is apparently an error generated by TsLint (EsLint?).



              However, independently of this "error" detected by TsLint, I think you may encounter problems with your Cloud Function because you don't return the last promise of your chain:



              return admin.firestore()     //HERE YOU RETURN CORRECTLY
              .doc(`/users/${userId}`)
              .get()
              .then(snapshot => {
              return snapshot //HERE YOU RETURN CORRECTLY
              })
              .then(customer => {
              const amount = payment.price * 100 // amount must be in cents
              const idempotency_key = paymentId // prevent duplicate charges
              const source = payment.token.id
              const currency = 'usd'
              const charge = {amount, currency, source}

              return stripe.charges.create(charge, { idempotency_key }) //HERE YOU RETURN CORRECTLY
              })
              .then((charge) => {
              return admin.firestore() //HERE, IN YOUR CODE, YOU DON'T RETURN
              .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
              .set({
              charge: charge
              }, { merge: true })
              })
              })





              share|improve this answer






























                1














                Actually, with the latest version(s) of Cloud Functions you are not obliged to include a catch() in your Promises chaining. The platform where the Cloud Function runs will handle the error itself.



                Based on this post What could this be about? [TsLint Error: "Promises must be handled appropriately"] it is apparently an error generated by TsLint (EsLint?).



                However, independently of this "error" detected by TsLint, I think you may encounter problems with your Cloud Function because you don't return the last promise of your chain:



                return admin.firestore()     //HERE YOU RETURN CORRECTLY
                .doc(`/users/${userId}`)
                .get()
                .then(snapshot => {
                return snapshot //HERE YOU RETURN CORRECTLY
                })
                .then(customer => {
                const amount = payment.price * 100 // amount must be in cents
                const idempotency_key = paymentId // prevent duplicate charges
                const source = payment.token.id
                const currency = 'usd'
                const charge = {amount, currency, source}

                return stripe.charges.create(charge, { idempotency_key }) //HERE YOU RETURN CORRECTLY
                })
                .then((charge) => {
                return admin.firestore() //HERE, IN YOUR CODE, YOU DON'T RETURN
                .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
                .set({
                charge: charge
                }, { merge: true })
                })
                })





                share|improve this answer




























                  1












                  1








                  1







                  Actually, with the latest version(s) of Cloud Functions you are not obliged to include a catch() in your Promises chaining. The platform where the Cloud Function runs will handle the error itself.



                  Based on this post What could this be about? [TsLint Error: "Promises must be handled appropriately"] it is apparently an error generated by TsLint (EsLint?).



                  However, independently of this "error" detected by TsLint, I think you may encounter problems with your Cloud Function because you don't return the last promise of your chain:



                  return admin.firestore()     //HERE YOU RETURN CORRECTLY
                  .doc(`/users/${userId}`)
                  .get()
                  .then(snapshot => {
                  return snapshot //HERE YOU RETURN CORRECTLY
                  })
                  .then(customer => {
                  const amount = payment.price * 100 // amount must be in cents
                  const idempotency_key = paymentId // prevent duplicate charges
                  const source = payment.token.id
                  const currency = 'usd'
                  const charge = {amount, currency, source}

                  return stripe.charges.create(charge, { idempotency_key }) //HERE YOU RETURN CORRECTLY
                  })
                  .then((charge) => {
                  return admin.firestore() //HERE, IN YOUR CODE, YOU DON'T RETURN
                  .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
                  .set({
                  charge: charge
                  }, { merge: true })
                  })
                  })





                  share|improve this answer















                  Actually, with the latest version(s) of Cloud Functions you are not obliged to include a catch() in your Promises chaining. The platform where the Cloud Function runs will handle the error itself.



                  Based on this post What could this be about? [TsLint Error: "Promises must be handled appropriately"] it is apparently an error generated by TsLint (EsLint?).



                  However, independently of this "error" detected by TsLint, I think you may encounter problems with your Cloud Function because you don't return the last promise of your chain:



                  return admin.firestore()     //HERE YOU RETURN CORRECTLY
                  .doc(`/users/${userId}`)
                  .get()
                  .then(snapshot => {
                  return snapshot //HERE YOU RETURN CORRECTLY
                  })
                  .then(customer => {
                  const amount = payment.price * 100 // amount must be in cents
                  const idempotency_key = paymentId // prevent duplicate charges
                  const source = payment.token.id
                  const currency = 'usd'
                  const charge = {amount, currency, source}

                  return stripe.charges.create(charge, { idempotency_key }) //HERE YOU RETURN CORRECTLY
                  })
                  .then((charge) => {
                  return admin.firestore() //HERE, IN YOUR CODE, YOU DON'T RETURN
                  .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
                  .set({
                  charge: charge
                  }, { merge: true })
                  })
                  })






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 23 '18 at 12:42

























                  answered Nov 23 '18 at 12:27









                  Renaud TarnecRenaud Tarnec

                  11.5k21531




                  11.5k21531

























                      0














                      finally figure it out
                      Whenever you make a promise function, it has to end with an error handler so i fixed this by using a simple catch



                      .then((charge) => {
                      admin.firestore()
                      .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
                      .set({
                      charge: charge
                      }, { merge: true })
                      .catch(er=>{
                      console.log(er);
                      return er
                      }
                      )
                      })





                      share|improve this answer




























                        0














                        finally figure it out
                        Whenever you make a promise function, it has to end with an error handler so i fixed this by using a simple catch



                        .then((charge) => {
                        admin.firestore()
                        .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
                        .set({
                        charge: charge
                        }, { merge: true })
                        .catch(er=>{
                        console.log(er);
                        return er
                        }
                        )
                        })





                        share|improve this answer


























                          0












                          0








                          0







                          finally figure it out
                          Whenever you make a promise function, it has to end with an error handler so i fixed this by using a simple catch



                          .then((charge) => {
                          admin.firestore()
                          .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
                          .set({
                          charge: charge
                          }, { merge: true })
                          .catch(er=>{
                          console.log(er);
                          return er
                          }
                          )
                          })





                          share|improve this answer













                          finally figure it out
                          Whenever you make a promise function, it has to end with an error handler so i fixed this by using a simple catch



                          .then((charge) => {
                          admin.firestore()
                          .collection('/payments').doc(userId).collection('mypayments').doc(paymentId)
                          .set({
                          charge: charge
                          }, { merge: true })
                          .catch(er=>{
                          console.log(er);
                          return er
                          }
                          )
                          })






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 23 '18 at 12:16









                          user10112707user10112707

                          155




                          155






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446378%2ffirebase-stripe-error-promises-must-be-handled-appropriately%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Create new schema in PostgreSQL using DBeaver

                              Deepest pit of an array with Javascript: test on Codility

                              Costa Masnaga