[当我试图向功能中添加一些验证和错误消息处理时,我对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是一种新语法,但是js在使用回调形式的语法之前已经异步。通常,方法有重载。如果不带参数调用它,则可以使用Promise语法,如果带参数调用它,则可以使用旧的回调样式(其中一个参数是function(){做事})。
https://braintree.github.io/braintree-web/current/HostedFields.html#tokenize
callback可以用作如果没有传递任何选项,则该函数。第二个参数data是一个tokenizePayload。如果未提供回调,则tokenize返回一个用tokenizePayload解析的函数。
您正在混合它们,并且由于您正在使用参数调用重载,所以它没有返回值(-> {Promise | void}中的空白,因此出现“未定义”错误。