javascript - 未设置对象属性,但控制台另有说明

标签 javascript jquery angularjs stripe-payments

我正在尝试使用 Angular 设置 strip 验证服务。我基本上想调用 StripeResponse.get() 并让它返回错误或 Stripe 响应的 token 。

我的问题是,当我执行此代码时,如果我执行 var a = StripeResponse.get(); 然后将 a 记录到控制台,我会看到

如果我在 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"

我不明白该控制台日志中的“response:null”和“response:Object”之间的差异。下面是我的服务/模块代码。

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

最佳答案

由于 createToken 方法不返回 promise 或没有任何类型的回调机制,因此您应该只使用 Angular $q's Defered API并为您的服务创建 promise 模式。

app.service('StripeResponse', ['$q', function ($q) {
  return {
    response: null,
    get: function () {
      var defered = $q.defer(); //Create a deffered object

      var form = $('form[name="ccForm"]');
      Stripe.createToken(form, function (status, response) {
        if (response.error) {
           defered.reject(response.error); //reject the promise

        } else {
            defered.resolve(response.id); //resolve the promise
        }

      });
      return defered.promise;
    }
  }
}]);

在使用您要做的服务时(伪代码):

  StripeResponseService.get()
  .then(function(id){//Handle Success
  })
  .catch(function(error){//Handle failure
  })

关于javascript - 未设置对象属性,但控制台另有说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983660/

相关文章:

javascript - 从旋转的元素中查找元素的实际高度和宽度

javascript - 使用异步 ajax 或 jquery 完全重新加载页面

javascript - 视频方向javascript

jquery - 如何忽略/覆盖溢出 :hidden of parent div without access to its css

javascript - 有没有办法在 asp.net mvc 3 中使用 JavaScript、Jquery 监听事件

javascript - ng-style 不更新 div 的样式属性

javascript - 当存储容量不足时,IOS 会删除 WebSQL 数据库吗?

javascript - Angular 智能表不起作用

javascript - 如何折叠/展开本网站上的 DIV

javascript - 在 app-root 中垂直对齐我的加载程序 - Angular2+