【发布时间】:2014-09-18 22:57:54
【问题描述】:
我正在尝试使用 Angular 设置条带验证服务。我基本上想调用 StripeResponse.get() 并让它返回错误或 Stripe 响应的令牌。
我的问题是,当我执行此代码时,如果我执行var a = StripeResponse.get(); 然后将a 记录到控制台,我会看到null。
如果我在return this.response; 之前添加console.log(this);,我会看到以下内容:
Object {response:null, get: function}
> get: function() {
v response: Object
code: "invalid_number"
message: "This card number looks invalid"
param: "number"
type: "card_error"
我不明白该控制台日志中“响应:null”和“响应:对象”之间的差异。下面是我的服务/模块代码。
var app = angular.module('StripeVerify', [ ]);
app.service('StripeResponse', function () {
return {
response: null,
get: function () {
var form = $('form[name="ccForm"]');
Stripe.createToken(form, $.proxy(function (status, response) {
if (response.error) {
return this.response = response.error;
} else {
return this.response = response.id;
}
}, this));
return this.response;
}
}
});
【问题讨论】:
-
您使用的是 Chrome 控制台吗?如果是这样,它会显示对 this 的引用,该引用会在您的异步任务期间更新,并且控制台也会更新。查看
createToken方法是否返回承诺或其他内容。 -
对 Stripe 的调用是异步的,使用 promise 从
get()返回 -
@charlietfl 老实说,我不知道如何使用从 get() 返回的承诺。我了解承诺的概念,但我不知道如何将其合并到代码中。
-
@PSL createToken 似乎没有返回承诺。在 Stripe 的网站上,createToken“负责向 Stripe 发送卡详细信息并等待令牌或错误响应”。
-
@Mephoros 所以你应该让你的
StripeResponseget 方法异步。您可以使用延迟对象来管理您自己的承诺。
标签: javascript jquery angularjs stripe-payments