使用asyncjs保存多个Mongoose对象不起作用

我想在我的摩卡testing中保存两个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() ) 

你可以看到,在console.log中obj1被设置为一个MongoDB文件 – 但是当我想要使用save函数将它们保存到数据库中时,在执行此操作时出现以下错误:

 TypeError: Cannot read property 'save' of undefined 

如果我用asyncreplaceasync.list中的两个函数

 console.log console.log 

代码执行得很好…另外,如果我将这两个对象保存在async.list函数之外,就像这样

 obj1.save() obj2.save() 

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

我很难过

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

当你像obj1.save一样传递一个“ 方法 ”时,引用async.list()只能获取到function本身,而没有任何链接返回到obj1 (或obj2 )。 它将类似于:

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

要传递一个固定的上下文,你可以bind它们:

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

或者使用其他函数,以便在成员操作符后调用它们:

 async.list([ (done) -> obj1.save(done), (done) -> obj2.save(done) ]) # etc.