Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在meteor方法中运行任务而不等待它完成?_Meteor_Queue - Fatal编程技术网

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

如何在meteor方法中运行任务而不等待它完成?,meteor,queue,Meteor,Queue,我在一行中有几个函数调用运行并等待返回,然后运行下一个。在运行这些函数之后,我有一个函数想要运行,但是我不想在运行return之前等待它完成 这是我的意思的一个例子 获取卡,创建订单,创建关联和借记订单都需要等待上一个功能完成后才能运行。当我进入队列。启动账户创建任务时我希望它开始运行,但让下面一行的返回也立即运行 Meteor.methods({ singleDonation: function (data) { logger.info("Started singleD

我在一行中有几个函数调用运行并等待返回,然后运行下一个。在运行这些函数之后,我有一个函数想要运行,但是我不想在运行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};
    }
});

听起来您需要对任务进行并行和串行控制。它的Node.js模块(每天下载400000次)被调用,Meteor包装器也被调用


迟早你会需要一个专门的后台任务管理包。如果async不够,请查看我对的评估。

对于我试图做的事情来说,似乎最有效的方法是使用Meteor.setTimeout({})。这似乎是一个奇怪的选择,但它做了我所需要的一切,包括设置流星环境,这样我就不必做任何Bindenriment调用。它还中断了当前的调用线程,这意味着它会将结果返回给客户机,然后在第二天完成其余的调用(这些调用是到外部API的,我不需要我的用户坐在那里等待)

@Sindis你能给我一个提示吗?我看过这篇文章,不知道如何使用它。主要是说做与我想做的相反的事情。试着把所有需要等待对方的动作都打包成一个动作fiber@Sindis我需要在最后一个函数完成之前返回到客户端。我不认为用光纤包装就可以了,因为我需要等待前面所有的工作完成后再开始最后一个函数。也许你可以在每个函数中尝试回调。如果它不起作用,我也帮不了你。实际上,我可以用这个解决我的问题。setTimeout(函数(){Utils.create_user(customerData._id,data._id,debitOrder._id);},100);我真的需要了解更多关于这里发生的事情,但我认为这样做的原因是任务是异步的,meteor负责bindEnvironment,因此我仍然可以将所有变量引用传递给它。这听起来对吗?setTimeout对我不起作用,因为我调用的函数使用了Fibers/Future。异步模块工作正常,感觉不那么粗糙。