Как заменить create на findOrCreate в sequelize

#node.js #sqlite #promise #sequelize.js

Вопрос:

У меня есть база данных, содержащая books отношения и writers в M:N с использованием authors таблицы ассоциаций. Я пытаюсь сохранить несколько books , имеющих 0..n writers каждый. Я запускаю модули узлов sequelize 6.6.2, sqlite 5 (в режиме разработки) и pg 8.5.1 (в режиме prod), npm 6.15.8, node v14.16.0. Я не использую cls режим, и я не определяю транзакции вручную.

Текущая часть кода выглядит так и работает так, как ожидалось

           books.forEach(book => {
                //create each book
                db.models.Book.create({
                    name: book.name,
                    edition: book.edition
                }).then(savedBook => {
                    //if book has authors, create the ones, that dont exist
                    if (book.authors) {
                        Promise.all(book.authors
                            .map(author => db.models.Writer.create(author))
                        ).then(savedWriters => {
                            log.debug('savedWriters', savedWriters)
                            Promise.all(
                                // and create relation to book for each of them
                                savedWriters.map(writer => writer.dataValues)
                                    .map(writer => db.models.Author.create({
                                        bookId: savedBook.id,
                                        writerId: writer.id
                                    }))
                            ).then(() => {
                                log.debug('authors saved')
                                callback()
                            }).catch(function (err) {
                                log.error('Error while saving authors ', err)
                            })
                        }).catch(function (err) {
                            log.error('Error while saving writers ', err)
                        })
                    } else {
                        callback()
                    }
                })
 

но когда я меняю значение db.models.Writer.create на db.models.Writer.findOrCreate , я получаю исключения для транзакций

 [SequelizeDatabaseError]: SQLITE_ERROR: cannot start a transaction within a transaction
 

Для завершений исключение не возникает ни при сохранении нескольких книг без авторов, ни при сохранении одной книги с несколькими авторами.
Как я мог бы достичь состояния, когда я не создавал writer бы каждый раз, когда создается книга, если writer она уже существует? Почему create поведение отличается от findOrCreate ? Заранее спасибо.