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

Javascript 检查Braintree事务中的tokenize()函数时出错,javascript,promise,braintree,Javascript,Promise,Braintree,我对JavaScript中的承诺有点困惑,当时我正在尝试向函数添加一些验证和错误消息处理 此代码适用于: hf.tokenize().then(function(payload) { // ... }).then(function(payload) { // ... }).catch(function(err) { console.log(err); }); 但是没有真正的错误处理,只是将它们转储到控制台中。当我尝试这样做时: hf.tokenize(function(e

我对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);
});
我得到以下错误:

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


我已经研究了一些其他问题,这些问题为类似的错误响应提供了解决方案,但困难在于我甚至不确定此时我应该做什么,或者返回什么。

Javascript promises是一种新语法,但js在回调形式的语法之前就有了async。通常一个方法有重载。如果不带参数调用它,则可以使用Promise语法;如果带参数调用它,则使用旧的回调样式(其中一个参数是函数(){do stuff})

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

您将它们混合在一起,因为您使用参数调用重载,所以它没有返回值(在->{Promise | void}中的void),因此出现了“undefined”错误