使用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.