現在、mongoose3.1.1とasync0.1.22の両方を使用しています。しかし、Mongooseモデルインスタンスをその中に保存しようとすると、async.auto
機能しなくなりました。
次の例を参照して、自分で試してください。
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!
save
したがって、問題はマングース機能に深く関係しています。
async.auto
Mongooseメソッドで動作すると、どこかで壊れているように見えますsave
。しかし、どこで、なぜか理解できません。