2013-11-09 3 views
1

새로운 약속 지원으로 작업하기 위해 Stripe을 사용하려고합니다. 체크 아웃을 사용Meteor.call이 응답을 반환하지 않습니다.

, 나는 토큰을 얻고 서버로 보내

Meteor.call('submit_charge', res.id, fee, name, reg, function (err, res) { 
    console.log(err, res); 
}); 

서버 방법은 다음과 같이 정의된다 :

submit_charge: function(tok, amt, name, reg) { 
    var Stripe = StripeAPI('privatekey'); 
    console.log('Submitting charge for ' + name); 
    Stripe.charges.create({ 
     amount: amt, 
     currency: "usd", 
     card: tok, 
     description: "Payment - " + name, 
     metadata: { 
      'reg': reg 
     }, 
    }).then(function(charge) { 
     console.log('Charge: ' + charge.id); 
     return charge.id; 
    }, function(err) { 
     console.log('Error: ' + err); 
     return 0; 
    }); 
} 

나는 메서드를 호출 할 수 있으며 실행하지만 아무튼 아무것도 돌려주지 마. Meteor.call에있는 console.log(err, res)은 둘 다에 대해 정의되지 않은 값을 반환합니다.

충전 프로세스 ... 및 console.logs는 Stripe의 요금 ID를 표시하므로 비동기 문제는 아닙니다.

나는 여기에 엄청난 기본 무언가를 놓치고 있습니까?

도움 주셔서 감사합니다.

submit_charge: function(tok, amt, name, reg) { 
    var Stripe = StripeAPI('privatekey'); 
    console.log('Submitting charge for ' + name); 

    var createCharge = Meteor._wrapAsync(Stripe.charges.create.bind(Stripe.charges)); 

    try { 
     var result = createCharge({ 
      amount: amt, 
      currency: "usd", 
      card: tok, 
      description: "Payment - " + name, 
      metadata: { 
      'reg': reg 
     }); 

     return result; 
    } 
    catch(e) { 
     //Error 
     console.log(e); 
    } 
} 

은 기본적으로 당신은 콜백 내에서 데이터를 반환하려는 :

답변

2

당신은 동기 자바 스크립트를 사용해야합니다. 운율 방법에 대한 데이터는 return이어야하며 then의 함수는 필요하지 않습니다.

Meteor._wrapAsync을 사용하면 Fibers를 사용하여 트랜잭션이 완료 될 때까지 기다린 다음 값을 반환하거나 오류 (try/catch)를 throw하여 오류를 가져옵니다.

+0

올바른 방향으로 나를 가리켜 주셔서 감사합니다. 나는 같은 일을 성취하기 위해 미래를 사용하여 끝냈다. – DisDev

관련 문제