如何从客户端同步到服务器?

我正在做几个从客户端到服务器的调用,具体取决于一些事情,我需要他们等待,直到完成之前,并在下一个开始之前返回一个值。 以下是我目前正在做的一个小例子:

客户:

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); } }); } 

服务器:

 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, {}); } }); 

所以在doOrder函数中addLicenseaddDevices都被设置的情况下,都会运行createCustomerdoCharge 。 我需要的是createCustomer函数在doCharge函数运行之前完成并返回一个值。

我知道我可以将doCharge函数放在doCharge函数的callback函数中,但是我有更多的函数需要按顺序运行,所以我想避免callback地狱 。

我用Meteor.wrapAsync认为会做,但没有骰子。 我仍然从API获取返回值,但它们都是同时发生的。

有任何想法吗? 先谢谢你。

所以@MichelFloydbuild议我最终将所有的呼叫转移到一个服务器端的方法,以便只需要来自客户端的一个调用。