Stripe createToken Synchronous - PullRequest
       3

Stripe createToken Synchronous

3 голосов
/ 19 апреля 2019

В настоящее время у меня есть следующий код проверки:

var validatePayment = function() {
        stripe.createToken(card).then(function(result) {
            if (result.error) {
              // Inform the customer that there was an error.
              var errorElement = document.getElementById('card-errors');
              errorElement.textContent = result.error.message;
              return false;

            } else {
              stripe_token = result.token;
              return true;

            }
          });

        return false
    }

И подтвердить платеж называется:

if(validatePayment() {
//Do Something
} else {
//Don't do something
}

Вызов validatePayment всегда ложен, потому что его асинхронная функция. Есть ли способ для stripe.createToken(card). Есть ли способ сделать это синхронно?

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Поскольку stripe.createToken(card) создает обещание, вы можете его вернуть, а затем определить результат не в условии (как в настоящее время, которое является синхронным), а с помощью .then() / .catch().

var validatePayment() {
    return stripe.createToken(card).then(function(result) { //<-- note return
};

validatePayment()
    .then(() => { /* payment was OK */ })
    .catch() => { /* uh-oh... */ });
0 голосов
/ 19 апреля 2019

Вы можете попробовать использовать обещания

    var validatePayment = function() {
                    return new Promise((resolve,reject)=>{ 
                      stripe.createToken(card).then(function(result) {
                        if (result.error) {
                          // Inform the customer that there was an error.
                      var errorElement = document.getElementById('card-errors');
                      errorElement.textContent = result.error.message;
                      return false;

                } else {
                  stripe_token = result.token;
                  return true;

                }
              });
    }).then(stats => {
            resolve(stats)
        }).catch( e =>
          reject()
)
...