获取一个函数,在继续之前等待post中间件保存完成



这是我的问题,我有一个工人运行,收集一些数据,然后将其保存到一个模式。在这些模式中,我有post中间件功能,发生在保存。问题是,我的worker在循环并再次保存到相同的模式之前没有等待post中间件完成工作。当我的worker继续运行时,它会大大减慢速度,因为它在完成之前会一次又一次地将这些函数排队。这些发布中间件函数还保存到其他模式中,这些模式也执行自己的发布函数。因此,正如你所看到的,当我处理成千上万个被保存的对象时,它开始变得很慢。

我的代码看起来像的例子:<标题>工人h1> Save现在跳转到模式中,那里发生了更多的事情,但是我的worker在完成之前循环并继续运行 <标题> 模式
ObjectSchema.post("save", function() {
 DOING STUFF

我读到我可能会使用像next()这样的东西作为工人的回调,但我尝试使用它是不成功的。

我想我不能以目前的形式回答这个问题,但基本的想法是

  1. 异步函数应该使用回调来通信当他们完成
  2. 调用异步代码的函数本身是异步的。

所以在你的例子中,看起来工作函数违反了这个原则,因为它调用了一个async函数,而它本身不是async的。您可以通过添加一个返回回调作为参数并在所有操作完成后(即在您调用的最后一个异步方法的回调中)调用所述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的人将能够知道内部保存方法何时完成。

最新更新