现在我正在使用mongoose 3.1.1和async 0.1.22。
但是当我试图在async.auto
内保存Mongoose模型实例时,它就停止了工作。
请参阅以下示例并亲自尝试:
mongoose = require 'mongoose'
async = require 'async'
Schema = mongoose.Schema
ObjectId = Schema.ObjectId
mongoose.connect "mongodb://localhost:27017/async-test"
SmthSchema = new Schema
data : type: String
mongoose.model 'Smth', SmthSchema
Smth = mongoose.model 'Smth'
test1 = (next) ->
console.log ' test 1'
smth = new Smth data: 'some data'
async.auto
first: (callback) ->
smth.save callback
second: ['first', (callback) ->
console.log ' it works!'
callback()]
next
test2 = (next) ->
console.log ' test 2'
smth = new Smth data: 'some data'
async.series [
smth.save.bind smth
(callback) ->
console.log ' it works!'
callback()
], next
test3 = (next) ->
console.log ' test 3'
context =
save: (callback) -> callback null
async.auto
first: context.save.bind context
second: ['first', (callback) ->
console.log ' it works!'
callback()]
next
test4 = (next) ->
console.log ' test 4'
smth = new Smth data: 'some data'
async.auto
first: smth.save.bind smth
second: ['first', (callback) ->
console.log ' it works!'
callback()]
next
console.log 'running all tests'
async.series [test1, test2, test3, test4], (err) ->
console.log err || 'all works!'
结果输出:
running all tests
test 1
it works!
test 2
it works!
test 3
it works!
test 4
smth.save.bind smth
将保存功能绑定到它应保存的对象。它适用于async.series
和async.parallel
,但不适用于async.auto
。
async.auto
将对象保存到数据库,但它会丢失回调和处理停止。
但有没有人知道为什么会这样?
最奇怪的是,我从来没有遇到任何问题,既没有绑定async.auto
内的任何其他内容,也没有绑定任何其他上下文中的绑定Mongoose
save方法。
我已经查看了async
代码,但我仍然不知道出了什么问题。现在我打算在github上写一个关于它的问题。
已添加20.09.12:我将save
函数替换为validate
函数,并且都运行良好:
running all tests
test 1
it works!
test 2
it works!
test 3
it works!
test 4
it works!
all works!
所以这个问题与mongoose save
函数有很大关系。
当它与Mongoose方法async.auto
一起使用时,save
看起来像某个地方。但我无法理解在哪里以及为什么。
答案 0 :(得分:2)
想出来:如果你使用@ dpatti的分支,它就可以了。我猜@caolan尚未合并(已经过了6个月左右)。我在我们的Node.js框架Sails中使用异步,所以我会密切注意这一点,所以如果它被合并,我会在这里回复。
在package.json中,将您的异步依赖项更改为:
"async": "git://github.com/dpatti/async.git#safe-auto"
然后做一个npm install
你应该好好去。
与Sequelize的save()结合时遇到同样的问题。我认为这是一个功能上下文问题 - 希望有助于作为一个开始!
我正在研究一个打破的基本示例,当有更多信息时我会报告。如果看起来它实际上是异步中的问题,我会在github中提出一个问题并在此处链接到它。
我也在使用原始javascript(没有咖啡)的异步0.1.22(和Sequelize 1.5.0-beta-2,以防万一)#/ p>