Skip to content

Middleware does not resolve when parallel is followed by serial and both are async #2521

Closed
@JedWatson

Description

@JedWatson

I have isolated a bug in pre('save', ...) middleware resolution, based on this issue: keystonejs/keystone#759

This works:

schema.pre('save', true, function(next, done) {
    console.log('locking 1');
    process.nextTick(function() {
        console.log('releasing lock 1');
        done();
    });
    next();
});

schema.pre('save', true, function(next, done) {
    console.log('locking 2');
    process.nextTick(function() {
        console.log('releasing lock 2');
        done();
    });
    next();
});

This also works:

schema.pre('save', true, function(next, done) {
    console.log('locking 1');
    process.nextTick(function() {
        console.log('releasing lock 1');
        done();
    });
    next();
});

schema.pre('save', function(done) {
    console.log('locking 2');
    console.log('releasing lock 2');
    done();
});

This does not work:

schema.pre('save', true, function(next, done) {
    console.log('locking 1');
    process.nextTick(function() {
        console.log('releasing lock 1');
        done();
    });
    next();
});

schema.pre('save', function(done) {
    console.log('locking 2');
    process.nextTick(function() {
        console.log('releasing lock 2');
        done();
    });
});

The order is important; if the serial middleware is included first in the bottom example, it works as expected.

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugWe've confirmed this is a bug in Mongoose and will fix it.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions