mon goose middleware как функция - PullRequest
0 голосов
/ 25 января 2020

У меня есть промежуточное программное обеспечение pre deleteMany в понедельник goose, и алгоритм этого промежуточного программного обеспечения выполняет итерации для других моделей, поэтому я хочу инкапсулировать этот алгоритм с помощью функции, которая может использоваться для других моделей.

, но когда я передаю следующий в качестве параметра для функционирования накоплена эта ошибка:

следующий не является функцией

мое первоначальное промежуточное ПО:

ShahrestanSchema.pre("deleteMany", function (next) {
    console.log('shahrestan-remove-controller-start')
    const { OstanModel } = require('./Ostan');
    const shahrestan_id_qry = this._conditions._id;
    OstanModel.find({ shahrestans: shahrestan_id_qry })
        .then(ostans => {
            Promise.all(
                ostans.map(ostan =>
                    OstanModel.findByIdAndUpdate(
                        ostan._id,
                        { $pullAll: { shahrestans: shahrestan_id_qry['$in'] } },
                        { new: true }
                    )
                ))
                .then(() => {
                    console.log('shahrestan-remove-controller-end')
                    next()
                })
                .catch(ex => next(new Error(ex)))
        });
});

это работает отлично, но когда я инкапсулирую это, как показано ниже:

function deleteManyController(thisOp, next, parentModel, parentKey) {
    console.log('shahrestan-remove-controller-start')
    const this_id_qry = thisOp._conditions._id;
    parentModel.find({ parentKey: this_id_qry })
        .then(findeds => {
            Promise.all(
                findeds.map(finded =>
                    parentModel.findByIdAndUpdate(
                        finded._id,
                        { $pullAll: { parentKey: this_id_qry['$in'] } },
                        { new: true }
                    )
                ))
                .then(() => {
                    console.log('shahrestan-remove-controller-end')
                    next()
                })
                .catch(ex => next(new Error(ex)))
        });
}

и меняю свое промежуточное ПО, как показано ниже:

ShahrestanSchema.post('deleteMany', function (next) {
    const thisOp = this
    deleteManyController(thisOp, next, OstanModel, 'shahrestans')
})

эта ошибка возникла:

TypeError: next не является функцией

Есть ли у вас идеи для инкапсуляции промежуточного программного обеспечения как функции?

...