我想在我的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()
它也执行得很好而没有错误。
我很难过。
答案 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.