Ошибка проверки функции tokenize () в транзакции Braintree - PullRequest
0 голосов
/ 08 октября 2019

Я немного путаюсь с Promises в JavaScript, когда в настоящее время пытаюсь добавить некоторую проверку и обработку сообщений об ошибках в функцию.

Этот код работает:

hf.tokenize().then(function(payload) {
    // ...
}).then(function(payload) {
    // ...
}).catch(function(err) {
   console.log(err);
});

Но в действительности не обрабатывает ошибки, просто выводит их в консоль. Когда я пытаюсь сделать это:

hf.tokenize(function(err, payload) {
    if (err) {
        // Handle error
    }

    return;
}).then(function(payload) {
    // ...
}).then(function(payload) {
    // ...
}).catch(function(err) {
   console.log(err);
});

я получаю следующую ошибку:

Uncaught TypeError: Невозможно прочитать свойство 'then' из undefined в HTMLInputElement anonymous

Я рассмотрел несколько других вопросов, которые дают решения для аналогичных ответов об ошибках, но проблема заключается в том, что я даже не уверен, что я собираюсь делать на этом этапе или что возвращать.

1 Ответ

0 голосов
/ 22 октября 2019

Обещания Javascript - это новый синтаксис, но у js была асинхронность перед синтаксисом в форме обратных вызовов. Обычно метод имеет перегрузки. Если вы вызываете его без параметров, вы можете использовать синтаксис Promise, а если вы вызываете его с параметрами, тогда вы используете старый стиль обратного вызова (где один из параметров является функцией () {do stuff}).

https://braintree.github.io/braintree-web/current/HostedFields.html#tokenize

callback Может использоваться в качестве единственного параметра функции, если не переданы никакие параметры. Второй аргумент, data, является tokenizePayload. Если обратного вызова не предоставлено, tokenize возвращает функцию, которая разрешается с помощью tokenizePayload.

Вы смешиваете их, и, поскольку вы вызываете перегрузку с параметрами, у нее нет возвращаемого значения (void в-> {Promise | void} отсюда "неопределенная" ошибка.

...