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

How can I run a task inside a meteor method without waiting for it to complete?

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

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

get_cardcreate_ordercreate_associationdebit_order都需要等待前面的函数完成后才能运行。当我到达 Queue.start_account_creation_task 时,我希望它开始 运行ning,但随后也立即让 运行 下面的行上的 return 开始。

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

听起来您需要对任务进行并行和串行控制。 (例如,每天 400,000 次下载)Node.js 模块称为 async, and a Meteor wrapper for it is peerlibrary:async

您迟早会需要专用的后台任务管理包。如果async不够用,看看我对packages to control background tasks in Meteor的评价。

似乎最适合我尝试做的事情就是使用 Meteor.setTimeout({})。这似乎是一个奇怪的选择,但它完成了我需要的一切,包括设置 Meteor Environment,这样我就不必执行任何 BindEnrironment 调用。它还会跳出当前的调用线程,这意味着它会 returns 将结果发送给客户端,并在一秒钟后完成其余的调用(这些调用是我不需要我的用户坐的外部 API在那里等待)。