使用asyncjs保存多个Mongoose对象无法正常工作

时间:2013-04-03 21:31:45

标签: node.js mongoose mocha

我想在我的mocha测试中保存两个Mongoose对象 - 并在两者都成功时收到通知。我正在使用asyncjs库来实现这一目标。

beforeEach (done) ->

  obj1 = new Person({ name: 'Jon' })
  obj2 = new Person({ name: 'Dan' })

  console.log obj1   # ... { name: 'Jon', _id: 4534534543512 }

  async.list([
    obj1.save
    obj2.save
  ]).call().end( (err, res) ->
    return done(err) if err
    done()
  )

你可以看到obj1被设置为console.log中的MongoDB文档 - 但是当我想使用save函数将它们持久保存到db时,我在尝试执行时遇到以下错误:

TypeError: Cannot read property 'save' of undefined

如果我用as

替换async.list中的两个函数
console.log
console.log

代码执行正常...另外,如果我要将这两个对象保存在async.list函数之外,那么

obj1.save()
obj2.save()

它也执行得很好而没有错误。

我很难过。

1 个答案:

答案 0 :(得分:2)

可能是因为没有使用预期的上下文(save)调用this函数。

当您传递“{em>方法”之类的obj1.save时,引用async.list()只会发送到function本身,而不会返回{{1} (或obj1)。它类似于:

obj2

要传递固定的上下文,您可以bind

save = obj1.save
save() # `this` is `undefined` or `global`

或者使用其他功能,以便在member operator之后调用它们:

async.list([
  obj1.save.bind(obj1)
  obj2.save.bind(obj2)
]) # etc.