我有几个函数调用连续运行并等待返回,然后下一个运行。运行这些之后我有一个我想要运行的函数,但是我不想在运行返回之前等待它完成。
这是我的意思的一个例子。
get_card
,create_order
,create_association
和debit_order
都需要等待上一个功能完成才能运行。当我到达Queue.start_account_creation_task
时,我希望它开始运行,但是让下面一行的返回也立即运行。
Meteor.methods({
singleDonation: function (data) {
logger.info("Started singleDonation");
//Get the card data from balanced and store it
var card = Utils.get_card(customerData._id, data.paymentInformation.href);
//Create a new order
var orders = Utils.create_order(data._id, customerData.href);
//Associate the card with the balanced customer
var associate = Utils.create_association(customerData._id, card.href, customerData.href);
//Debit the order
var debitOrder = Utils.debit_order(data.paymentInformation.total_amount, data._id, customerData._id, orders.href, card.href);
Queue.start_account_creation_task(customerData._id, data._id, debitOrder._id);
return {c: customerData._id, don: data._id, deb: debitOrder._id};
}
});
答案 0 :(得分:0)
听起来你需要对任务进行并行和串行控制。 (每天400,000次下载)Node.js模块称为async
,其流星包装为peerlibrary:async。
迟早你需要专门的后台任务管理包。如果异步不足,请查看我对packages to control background tasks in Meteor的评价。
答案 1 :(得分:0)
似乎最适合我尝试做的事情就是使用Meteor.setTimeout({})
。这似乎是一个奇怪的选择,但它做了我需要的一切,包括设置流星环境,以便我不必进行任何BindEnrironment调用。它也会打破当前的调用线程,这意味着它会将结果返回给客户端,然后一秒钟完成其余的调用(这些调用是外部API,我不需要我的用户坐在那里等待对于)。