在Braintree事务中检查tokenize()函数时出错

问题描述 投票:0回答:1

[当我试图向功能中添加一些验证和错误消息处理时,我对JavaScript中的Promises感到有些困惑。

此代码有效:

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);
});

我收到以下错误:

未捕获的TypeError:无法读取未定义的属性'then'在HTMLInputElement匿名

我看过其他一些问题,这些问题为相似的错误响应提供了解决方案,但困难之处在于,我什至不确定现在要做什么或返回什么。

javascript promise braintree
1个回答
0
投票

Javascript Promise是一种新语法,但是js在使用回调形式的语法之前已经异步。通常,方法有重载。如果不带参数调用它,则可以使用Promise语法,如果带参数调用它,则可以使用旧的回调样式(其中一个参数是function(){做事})。

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

callback可以用作如果没有传递任何选项,则该函数。第二个参数data是一个tokenizePayload。如果未提供回调,则tokenize返回一个用tokenizePayload解析的函数。

您正在混合它们,并且由于您正在使用参数调用重载,所以它没有返回值(-> {Promise | void}中的空白,因此出现“未定义”错误。

© www.soinside.com 2019 - 2024. All rights reserved.