SQLITE_BUSY: database is locked | Sequelize Node Javascript

router.post("/update-quiz", upload.single("file"), async (req, res) => {
    const transaction = await sequelize.transaction();

    try {
        const actions = {
            "Multiple Choice": async (questions, transaction) => {
                const data = await MultipleChoice.bulkCreate(questions, {transaction: transaction});
                return data.map(question => question.question_id);
            },
            "Identification": async (questions, transaction) => {
                const data = await Identification.bulkCreate(questions, {transaction: transaction});
                return data.map(question => question.question_id);
            },
            "True or False": async (questions, transaction) => {
                const data = await TrueOrFalse.bulkCreate(questions, {transaction: transaction});
                return data.map(question => question.question_id);
            }
        };

        const deleteActions = {
            "Multiple Choice": async (questions_id, transaction) => {
                await MultipleChoice.destroy({
                    where: {
                        question_id: {
                            [Op.or]: questions_id
                        }
                    }
                }, {transaction: transaction});
            },
            "Identification": async (questions_id, transaction) => {
                await Identification.destroy({
                    where: {
                        question_id: {
                            [Op.or]: questions_id
                        }
                    }
                }, {transaction: transaction});
            },
            "True or False": async (questions_id, transaction) => {
                await TrueOrFalse.destroy({
                    where: {
                        question_id: {
                            [Op.or]: questions_id
                        }
                    }
                }, {transaction: transaction});
            }
        };

        const quiz = JSON.parse(req.body.quiz);
        const questions = JSON.parse(req.body.questions);

        if (Object.keys(actions).includes(quiz.type)) {
            const validator = {
                "Multiple Choice": validateMultipleChoice,
                "Identification": validateIdentification,
                "True or False": validateTrueOrFalse
            };
            const validations = getValidations(questions, quiz, validator[quiz.type]);
            if (validations.every(v => v.isValid)) {
                const previousQuiz = await Quiz.findOne({where: {quiz_id: quiz.quiz_id}}, {transaction: transaction});
                await deleteActions[previousQuiz.type](previousQuiz.questions_id.split("|"), transaction);
                const newQuestions = await actions[quiz.type](questions, transaction);

                let fileName = "";

                if (!req.file) {
                    fileName = `${quizImagePath}/${createDateForFile()}.png`;
                    createImage(300, 200, fileName, 30, "quizzy-quest");
                } else {
                    fileName = `${quizImagePath}/${req.file.filename}`;
                }

                await Quiz.update(
                    {
                        name: quiz.name,
                        description: quiz.description,
                        topic: quiz.topic,
                        type: quiz.type,
                        visibility:quiz.visibility,
                        questions_id: newQuestions.join("|"),
                        image_path: fileName
                    },
                    {where: {quiz_id: quiz.quiz_id}},
                    {transaction: transaction}
                );

                await transaction.commit();
                return res.status(201).json({message: "Quiz successfully updated."});
            } else {
                return res.status(400).json(validations.filter(v => !v.isValid).map(v => v.message));
            }
        } else {
            return res.status(400).json(["Invalid quiz type"]);
        }
    } catch (error) {
        await transaction.rollback();
        return res.status(500).json({error: error.toString()});
    }
});

The route is about updating the quiz (sequelize model) then remove the previous questions
(sequelize model) and add the edited/updated questions. I add transaction for data integrity. I debug where the SQLITE_BUSY error come from and it is in the Quiz.update. Please explain to me what is happening here why I am getting that error, how could I handle this problem. Any help would be appreciated.