Javascript 如何在Angular中调用另一个函数中的函数
我正在建立一个在线商店,我正在使用,在api中,我试图在支付网关api中运行一个函数,但它不起作用。代码如下:Javascript 如何在Angular中调用另一个函数中的函数,javascript,angular,Javascript,Angular,我正在建立一个在线商店,我正在使用,在api中,我试图在支付网关api中运行一个函数,但它不起作用。代码如下: payWithPaystack(returnData, amount){ const binded = this.service.completePayment.bind(this) var handler = PaystackPop.setup({ key: '.......', email: this.details.email,
payWithPaystack(returnData, amount){
const binded = this.service.completePayment.bind(this)
var handler = PaystackPop.setup({
key: '.......',
email: this.details.email,
amount: amount,
currency: "NGN",
ref: `ref-${Math.ceil(Math.random() * 10e13)}`,
metadata: {
custom_fields: [{
display_name: this.details.firstName+' '+this.details.lastName,
variable_name: "mobile_number",
value: this.details.phoneNumber
}]
},
callback(res){
console.log(res)
binded(res);
},
onClose(){
console.log('window closed');
this.color='danger'
this.payDisplay='Transaction closed'
this.payClick=false
}
});
handler.openIframe();
}
在服务页面中,这里是代码
completePayment(sentData){
console.log('enter')
this.http.post(`${this.ApiURL}payAm.php`, sentData, {headers:this.headers})
.subscribe(data=>console.log('ok'), error=>console.log(error))
}
现在的问题是,completePayment
函数正在部分调用,console.log正在运行,但它没有发送http请求,请问如何解决这个问题绑定语法
...
payWithPaystack(returnData, amount){
const binded = this.service.completePayment.bind(this);
let handler = PaystackPop.setup({
....
callback(res){
binded(res);
}
...
您还可以尝试绑定service ref.编写
payWithPaystack
方法,以便它返回承诺:
payWithPaystack(amount){
return new Promise( (resolve,reject) => {
var handler = PaystackPop.setup({
key: '.......',
email: this.details.email,
amount: amount,
currency: "NGN",
ref: `ref-${Math.ceil(Math.random() * 10e13)}`,
metadata: {
custom_fields: [{
display_name: this.details.firstName+' '+this.details.lastName,
variable_name: "mobile_number",
value: this.details.phoneNumber
}]
},
callback(res){
console.log(res)
//RESOLVE promise
resolve(res);
},
onClose(){
console.log('window closed');
//REJECT promise
reject('window closed');
}
});
handler.openIframe();
});
}
然后使用它返回的承诺:
this.payWithPaystack(amount)
.then( sentData => {
console.log('enter', sentData);
this.http.post(`${this.ApiURL}payAm.php`, sentData, {headers:this.headers})
.subscribe(data=>console.log('ok'), error=>console.log(error))
}).catch( reason => {
console.log("rejected: ", reason);
this.color='danger'
this.payDisplay='Transaction closed'
this.payClick=false;
});
承诺是链接异步操作的最佳方式。请阅读-总结是,这不是解决志愿者问题的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。您面临的问题是什么?能否提供一些日志?你如何决定它不起作用?也许你有一些错误或者…?问题是this.completePayment(res)没有运行它说绑定在'void'类型上不存在好的,我的错我已经确定了答案。它没有完全工作,这里是服务completePayment(sentData){console.log('enter')this.http.post(
${this.apirl}payAm.php
,sentData中的函数,{headers:this.headers}).subscribe(data=>console.log('ok'),error=>console.log(error))}您也尝试过绑定服务引用吗?const binded=this.service.completePayment.bind(this.service);