Как получить доступ к БД из функции и только потом отправить почтовый запрос? - PullRequest
0 голосов
/ 19 июня 2020

Мне нужна помощь, чтобы интегрировать несколько действий внутри функции.

Мне звонят из PayPal, и мне нужно:

  1. Доступ к моей БД для сравнения.
  2. Если все в порядке, отправьте 200 ОК
  3. Отправьте тело запроса обратно.

В настоящее время - я делаю (3) только , и это как-то работает без (2).

     exports.contentServer = functions.https.onRequest((request, response) => {
     ....
     ....

    if(request.path === paid)
       {

               if (request.method !== "POST")
                  response.status(405).send("Method Not Allowed");

               else {
                           let ipnTransactionMessage = request.body;
                           let formUrlEncodedBody = querystring.stringify(ipnTransactionMessage);
                           let verificationBody = `cmd=_notify-validate&${formUrlEncodedBody}`;

                           //______________

                          //** at this point i need to read a firebase collection and return 200OK , ONLY THEN DO THE POST BELOW


                           var docRef = admin.firestore().collection('All').doc(ipnTransactionMessage.custom);
                           docRef.once('value').then(function(snapshot) {
                             console("our data to compare",snapshot);
                             res.status(200); // ?
                           });

//**** how do i do the next only after the previous ?


                           let options = {
                                     method: 'POST',
                                     uri: "https://ipnpb.sandbox.paypal.com/cgi-bin/webscr", 
                                     body: verificationBody
                                       };
                           return rp(options)
                                  .then(body => {
                                        if (body === "VERIFIED") {
                                     //** we are done here - and this actually works already
                                })
                                .then(docReference => {
                                    console.log("Request completed");
                                    return response.send({ result: 'ok' });
                                })
                                .catch(error => {
                                    console.log(error);
                                    return response.status(500).send(error);
                                });

См. комментарий в коде. После того, как прочитал мою БД и ответил 200 OK, только тогда я хотел бы отправить тело обратно, как я.

1 Ответ

0 голосов
/ 19 июня 2020

Как упоминал Дуг, код должен быть go в предложении then:

Я взял часть вашего кода, чтобы показать, где код будет выполняться, только когда ответы firestore могут go.

    //** at this point i need to read a firebase collection and return 200OK , ONLY THEN DO THE POST BELOW


             var docRef = admin.firestore().collection('All').doc(ipnTransactionMessage.custom);
             docRef.once('value').then(function(snapshot) {
               console("our data to compare",snapshot);
               res.status(200); //
               if(snapshot.exists){
                 //  ---------------------------------
                 //  The code that you want to get executed only 
                 //  firestore answers Goes Here
                 //  ---------------------------------
                 }
               });



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