在继续之前获取等待后期中间件保存的功能

时间:2013-01-08 19:53:33

标签: javascript node.js mongodb callback database

这是我的问题,我有一个工作正在运行,收集一些数据,然后将其保存到架构。在那些模式中,我发布了保存时发生的中间件功能。问题是我的工作人员不会等待后中间件在循环之前完成工作并再次保存到同一模式。当我的工作人员继续运行时,它会大幅减慢,因为它会在完成这些功能之前反复排队。那些后中间件函数也保存到其他模式,这些模式也执行自己的post函数。因为我可以告诉我开始真正放慢速度,因为我正在处理数十万个被保存的对象。

我的代码看起来像的样子:

工人

tranFunc = (stuff, Object) -> 
            newObject = Object
            newObject = new Object newObject
            newObject.save (err) ->

Save现在跳转到架构中,其中发生了一些更多的事情,但我的工作人员在完成之前循环并继续前进

模式

ObjectSchema.post("save", function() {
 DOING STUFF

我已经读过,我可以使用类似next()之类的东西作为对工人的回调,但我尝试使用它并不成功。

1 个答案:

答案 0 :(得分:1)

我认为我不能用现在的形式回答这个问题,但基本的想法是

  1. 异步功能应该在完成后使用回调进行通信
  2. 调用异步代码的函数本身就是异步的。
  3. 所以在你的情况下,看起来worker函数违反了这个原则,因为它调用异步函数而不是异步本身。您可以通过添加一个返回回调作为参数并在所有操作完成后调用所述callbabk(即,在您调用的最后一个异步方法的回调内)来解决此问题。

    //sort of like this:
    tranFunc = (stuff, Object, doneCb) -> 
            newObject = Object
            newObject = new Object newObject
            newObject.save (err) ->
                doneCb( /*put return values here as appropriate*/ )
    

    现在,无论是谁调用tranFunc,都能知道内部保存方法何时结束。