我如何 运行 流星方法中的任务而不等待它完成?
How can I run a task inside a meteor method without waiting for it to complete?
我连续有几个函数调用 运行 并等待 return,然后是下一个 运行。在这些 运行 之后,我有一个功能我想 运行,但是我不想在我 运行 我的 return 之前等待它完成。
这是我的意思的一个例子。
get_card
、create_order
、create_association
和debit_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在那里等待)。
我连续有几个函数调用 运行 并等待 return,然后是下一个 运行。在这些 运行 之后,我有一个功能我想 运行,但是我不想在我 运行 我的 return 之前等待它完成。
这是我的意思的一个例子。
get_card
、create_order
、create_association
和debit_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在那里等待)。