Firebase и нашивки вернуть ссылку - PullRequest
0 голосов
/ 14 января 2020

Итак, я пишу функцию Firebase. Все идет нормально. Я возвращаю функцию чередования, которая имеет функцию обратного вызова, где я возвращаю объект link. Но в клиенте я получаю null в качестве ответа.

Это мой код:

exports.handler = (data, context) => {
  if (!context.auth)
    // Throwing an HttpsError so that the client gets the error details.
    throw new functions.https.HttpsError(
      "failed-auth",
      "Bitte melden Sie sich an"
    );
  if (!context.auth.token.email_verified)
    throw new functions.https.HttpsError(
      "failed-precondition",
      "Bitte verifizieren Sie Ihre Email."
    );
  return db
    .collection("userInformation")
    .doc(context.auth.uid)
    .get()
    .then(user => {
      if (!user)
        throw new functions.https.HttpsError(
          "failed-precondition",
          "Nutzer wurde nicht gefunden"
        );
      const userData = user.data();
      if (!userData.stripeAccountId)
        throw new functions.https.HttpsError(
          "failed-precondition",
          "Der Nutzer ist mit keinem Stripe Account verbunden"
        );

      return stripe.accounts.createLoginLink(
        userData.stripeAccountId,
        (err, link) => {
            if(err) console.log(err);
          console.log(link.url +" +TEST");
          return link;
        }
      );
    });
};

Так что я думаю, что проблема, если бы я мог .then() метод нашивки, Я мог бы справиться с возвращением лучше. Но как мне сделать это с этим обратным вызовом?

1 Ответ

0 голосов
/ 14 января 2020

Я предполагаю, что вы используете Stripe-node (https://github.com/stripe/stripe-node). Stripe-Node возвращает обещание для всех вызовов функций, так что да, определенно вы можете использовать синтаксис .then (https://github.com/stripe/stripe-node/blob/master/lib/StripeMethod.js#L45)

например

stripe.accounts.createLoginLink(
        userData.stripeAccountId,
        (err, link) => {
            if(err) console.log(err);
          console.log(link.url +" +TEST");
          return link;
        }
      );

Could быть написано в

stripe.accounts.createLoginLink(userData.stripeAccountId)
  .then(link => { // do something with link }
  .catch(err => { // handle your error }

или в async/await

try {
  let link = await stripe.accounts.createLoginLink(userData.stripeAccountId)
} catch(err) { 
  // handle your error 
}
...