몇 가지 사항에 따라 클라이언트에서 서버로 몇 차례의 호출을하고 있는데, 완료되기 전에 기다렸다가 다음 값이 반환되기 전에 기다려야합니다. 여기에 내가 현재 뭘하는지의 작은 예입니다클라이언트에서 서버로 동 기적으로 전화를 거는 방법은 무엇입니까?
클라이언트 :
function doOrder() {
var addDevices = Template.instance().addDevices.get();
if (addLicense) {
createCustomer();
}
if (addDevices) {
var maintProrate = Session.get('maintProrate');
var deviceCharge = (deviceFee * addDevices);
doCharge(deviceCharge, 'DEVICES', 'deviceCharge', 'chargeMaintFee');
}
}
function createCustomer() {
var stripeArgs = Helpers.client.stripeArgs('form');
Meteor.call('stripe', 'customers', 'create', stripeArgs, function(err, response){
if (err) {
console.log(err);
Bert.alert(err, 'danger');
} else {
Session.set('customerInfo', response);
Session.set('customerId', response.id);
}
});
}
function doCharge(amount, description, storeKey) {
var chargeArgs = {
amount: amount,
currency: 'usd',
customer: Session.get('customerId'),
description: description
};
Meteor.call('stripe', 'charges', 'create', chargeArgs, function(err, response){
if (err) {
console.log(err);
Bert.alert(err, 'danger');
} else {
Session.set(storeKey, response);
}
});
}
서버 : addLicense
및 addDevices
이 모두 doOrder
동안 설정되어 있는지 경우에 따라서
Meteor.methods({
stripe(func1, func2, arg1) {
check(func1, String);
check(func2, String);
check(arg1, Match.OneOf(Object, String));
var func = Meteor.wrapAsync(Stripe[func1][func2], Stripe[func1]);
return func(arg1, {});
},
stripe2(func1, func2, arg1, arg2) {
check(func1, String);
check(func2, String);
check(arg1, Match.OneOf(Object, String));
check(arg2, Match.OneOf(Object, String));
var func = Meteor.wrapAsync(Stripe[func1][func2], Stripe[func1]);
return func(arg1, arg2, {});
}
});
함수에서 createCustomer
과 doCharge
이 실행됩니다. 내가 필요한 것은 createCustomer
함수가 완료되어 doCharge
함수가 실행되기 전에 값을 반환하는 것입니다.
createCustomer
함수의 콜백에 doCharge
함수를 넣을 수 있다는 것을 알고 있지만, 나는 피하려고하고 싶다면 더 많은 함수를 사용해야합니다. callback hell.
Meteor.wrapAsync
나는 주사위를 사용하지 않을 것이라고 생각했습니다. API에서 반환 값을 얻지 만 모두 동시에 발생합니다.
아이디어가 있으십니까? 미리 감사드립니다.
동기되지 않고 순차적 일 수 있습니다. xhr 호출이 동기가되는 것을 원하지는 않습니다. 그리고 단순히 더 많은 기능을 사용하거나 약속을 효과적으로 사용함으로써 콜백 지옥을 피할 수 있습니다. –
@KevinB 나는 이해할 수 없을 것 같다. 나는 그것들 모두가 같은 것을 의미한다고 생각했다. 'createCustomer' 함수는'doCharge' 함수에서 전달해야하는 값을 반환합니다. 그러나'doCharge' 함수는'createCustomer' 함수와 동시에 호출되어 API로부터 에러를 리턴합니다. –
동기식 ajax 요청은 요청이 완료 될 때까지 이벤트 루프를 차단하므로 모든 요청이 완료 될 때까지 페이지가 중단되거나 응답하지 않을 수도 있습니다. –