如何在流星方法中运行任务而不等待它完成?

时间:2015-02-10 16:00:14

标签: meteor queue

我有几个函数调用连续运行并等待返回,然后下一个运行。运行这些之后我有一个我想要运行的函数,但是我不想在运行返回之前等待它完成。

这是我的意思的一个例子。

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

2 个答案:

答案 0 :(得分:0)

听起来你需要对任务进行并行和串行控制。 (每天400,000次下载)Node.js模块称为async,其流星包装为peerlibrary:async

迟早你需要专门的后台任务管理包。如果异步不足,请查看我对packages to control background tasks in Meteor的评价。

答案 1 :(得分:0)

似乎最适合我尝试做的事情就是使用Meteor.setTimeout({})。这似乎是一个奇怪的选择,但它做了我需要的一切,包括设置流星环境,以便我不必进行任何BindEnrironment调用。它也会打破当前的调用线程,这意味着它会将结果返回给客户端,然后一秒钟完成其余的调用(这些调用是外部API,我不需要我的用户坐在那里等待对于)。