Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使外部异步JavaScript API适应AngularJS框架_Javascript_Angularjs_Asynchronous_Angular Promise_Ionic V1 - Fatal编程技术网

使外部异步JavaScript API适应AngularJS框架

使外部异步JavaScript API适应AngularJS框架,javascript,angularjs,asynchronous,angular-promise,ionic-v1,Javascript,Angularjs,Asynchronous,Angular Promise,Ionic V1,我一直在尝试修改API的JavaScript代码以接收支付令牌,但我找不到创建运行该代码的函数的方法。API的原始示例非常有效,但我无法将代码转换为可重用函数。我尝试了不同的方法,但我总是得到相同的错误: TypeError: $scope.token is not a function 我在一个Ionic应用程序中使用这个代码。 请帮帮我,我找不到解决办法 API的原始示例: $gn.ready(功能(签出){ var callback=函数(错误、响应){ 如果(错误){ //错误 控制

我一直在尝试修改API的JavaScript代码以接收支付令牌,但我找不到创建运行该代码的函数的方法。API的原始示例非常有效,但我无法将代码转换为可重用函数。我尝试了不同的方法,但我总是得到相同的错误:

TypeError: $scope.token is not a function
我在一个Ionic应用程序中使用这个代码。 请帮帮我,我找不到解决办法

API的原始示例:

$gn.ready(功能(签出){
var callback=函数(错误、响应){
如果(错误){
//错误
控制台错误(error);
}否则{
//成功
控制台日志(响应);
}
};
checkout.getPaymentToken({
品牌:“visa”,
编号:“4012001038443335”,
cvv:'123',
到期月份:“05”,
到期年份:2018年
},回调);
});
$scope.getToken=函数(签出、b、n、c、m、y){
var callback=函数(错误、响应){
如果(错误){
//埃罗奥科里多餐厅
控制台错误(error);
}否则{
//反应塔
console.log(response.data.payment\u令牌);
}
};
checkout.getPaymentToken({
品牌:b,//bandeira do cartão
编号:n,//número do cartão
cvv:c,//código de segurança
到期月份:m,//mês de vencimento
到期年份:y//ano de vencimento
},回调);
};
$gn.ready(功能(签出){
$scope.getToken(checkout,b,n,c,m,y);

});将$gn异步API放入服务中:

app.constant("gnAPI", $gn);

app.service("gnService", function(gnAPI,$q) {
    this.getPaymentToken = function(cardData) {
        var future = $q.defer();
        gnAPI.ready(function(checkout) {
            checkout.getPaymentToken(
                cardData,
                function callback(error, response) {
                   if (error) {
                       future.reject(error);
                   } else {
                       future.resolve(response);
                   };
                } 
            );
        });
        return future.promise;
    };
});
然后在控制器中使用:

var cardData = {
    brand: 'visa', 
    number: '4012001038443335', 
    cvv: '123', 
    expiration_month: '05',
    expiration_year: '2018'
};

gnService.getPaymentToken(cardData)
  .then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
    throw error;
});
通过使用AngularJS$q服务创建$q服务承诺,外部异步API将与AngularJS框架及其范围摘要周期正确集成


有关更多信息,请参阅。

什么是$gn?您应该使用美元前缀,这是保留的。$gn来自API的SDK。文档的细节很差,但这基本上是一个初始化函数,允许调用“getPaymentToken”。是哪行代码导致了错误?第二行,在“$scope.token=function(b,n,c,m,y){”我尝试了它,但它在函数回调(future.reject,future.resolve)时记录了一个错误:“app.js:18未捕获的语法错误:意外标记。"不过,您的解决方案看起来很棒,我真的在努力让它工作。我对Angular和Ionic还不熟悉,这就是为什么我一直在为服务和异步API而挣扎。它工作,但仍然存在一个问题:每次启动应用程序时,$scope.getToken函数都在运行。我想在按钮单击事件后运行它…我尝试存储它结帐后使用,但它不起作用。有什么建议吗?