在Meteor Server文件夹中,我有这个main.js文件。 在main.js文件中,我添加了这段代码,
saveCC(data){
var cc = "";
...
wp.call('/credit_card/create',
{
'client_id': some_id,
'cc_number': data.ccn,
'cvv': data.cvv,
'expiration_month': data.em,
'expiration_year': data.ey,
'user_name': data.name,
'email': data.eadd,
'address': {
'country': 'US',
'postal_code': data.postal,
}
},
function(response) {
if(response.error){
throw new Meteor.Error("WePay-Form",response.error_description);
}
cc = response.credit_card_id;
}
);
return "succesful";
}
我可以获得response.credit_card_id。但它只在wp.call中。这个wp.call函数在Meteor.methods中。我怎样才能获得credit_card_id?如何返回错误?
更具体地说,问题在于,当用户调用saveCC时,即使wp.call尚未完成,它也会返回“成功”消息。所以我没有得到Meteor.error。还有一个错误,它是关于Meteor.error,它只允许在Meteor.methods内部,但不允许在wp.call中。 cc也没有用信用卡更新。
答案 0 :(得分:0)
当您的流星方法运行时,这就是它的作用,非常快:
稍后,您的异步调用会返回,但无关紧要,因为您的方法已经退出很久了。这有意义吗?
您需要的是一种机制,在异步调用返回之前,您的方法不会退出。你可以使用期货,它看起来像这样:
let Future = Npm.require('fibers/future');
Meteor.methods({
'foo': function() {
let future = new Future();
wp.call('/credit_card/create',
{
'client_id': some_id,
'cc_number': data.ccn,
'cvv': data.cvv,
'expiration_month': data.em,
'expiration_year': data.ey,
'user_name': data.name,
'email': data.eadd,
'address': {
'country': 'US',
'postal_code': data.postal,
}
},
function(response) {
if(response.error){
future.throw(new Meteor.Error("WePay-Form",response.error_description));
}
cc = response.credit_card_id;
future.return(cc);
}
);
return future.wait();
}
});